pax_global_header00006660000000000000000000000064142312525240014512gustar00rootroot0000000000000052 comment=4c5747f5505f6f1d968fab304e1a2067ce723771 revelation-revelation-0.5.5/000077500000000000000000000000001423125252400160375ustar00rootroot00000000000000revelation-revelation-0.5.5/.bandit000066400000000000000000000201201423125252400172740ustar00rootroot00000000000000 ### Bandit config file generated from: # '/usr/bin/bandit-config-generator -o .bandit' ### This config may optionally select a subset of tests to run or skip by ### filling out the 'tests' and 'skips' lists given below. If no tests are ### specified for inclusion then it is assumed all tests are desired. The skips ### set will remove specific tests from the include set. This can be controlled ### using the -t/-s CLI options. Note that the same test ID should not appear ### in both 'tests' and 'skips', this would be nonsensical and is detected by ### Bandit at runtime. # Available tests: # B101 : assert_used # B102 : exec_used # B103 : set_bad_file_permissions # B104 : hardcoded_bind_all_interfaces # B105 : hardcoded_password_string # B106 : hardcoded_password_funcarg # B107 : hardcoded_password_default # B108 : hardcoded_tmp_directory # B110 : try_except_pass # B112 : try_except_continue # B201 : flask_debug_true # B301 : pickle # B302 : marshal # B303 : md5 # B304 : ciphers # B305 : cipher_modes # B306 : mktemp_q # B307 : eval # B308 : mark_safe # B309 : httpsconnection # B310 : urllib_urlopen # B311 : random # B312 : telnetlib # B313 : xml_bad_cElementTree # B314 : xml_bad_ElementTree # B315 : xml_bad_expatreader # B316 : xml_bad_expatbuilder # B317 : xml_bad_sax # B318 : xml_bad_minidom # B319 : xml_bad_pulldom # B320 : xml_bad_etree # B321 : ftplib # B323 : unverified_context # B324 : hashlib_new_insecure_functions # B325 : tempnam # B401 : import_telnetlib # B402 : import_ftplib # B403 : import_pickle # B404 : import_subprocess # B405 : import_xml_etree # B406 : import_xml_sax # B407 : import_xml_expat # B408 : import_xml_minidom # B409 : import_xml_pulldom # B410 : import_lxml # B411 : import_xmlrpclib # B412 : import_httpoxy # B413 : import_pycrypto # B501 : request_with_no_cert_validation # B502 : ssl_with_bad_version # B503 : ssl_with_bad_defaults # B504 : ssl_with_no_version # B505 : weak_cryptographic_key # B506 : yaml_load # B507 : ssh_no_host_key_verification # B601 : paramiko_calls # B602 : subprocess_popen_with_shell_equals_true # B603 : subprocess_without_shell_equals_true # B604 : any_other_function_with_shell_equals_true # B605 : start_process_with_a_shell # B606 : start_process_with_no_shell # B607 : start_process_with_partial_path # B608 : hardcoded_sql_expressions # B609 : linux_commands_wildcard_injection # B610 : django_extra_used # B611 : django_rawsql_used # B701 : jinja2_autoescape_false # B702 : use_of_mako_templates # B703 : django_mark_safe # (optional) list included test IDs here, eg '[B101, B406]': tests: # (optional) list skipped test IDs here, eg '[B101, B406]': skips: ### (optional) plugin settings - some test plugins require configuration data ### that may be given here, per-plugin. All bandit test plugins have a built in ### set of sensible defaults and these will be used if no configuration is ### provided. It is not necessary to provide settings for every (or any) plugin ### if the defaults are acceptable. any_other_function_with_shell_equals_true: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run assert_used: skips: [] hardcoded_tmp_directory: tmp_dirs: - /tmp - /var/tmp - /dev/shm linux_commands_wildcard_injection: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run ssl_with_bad_defaults: bad_protocol_versions: - PROTOCOL_SSLv2 - SSLv2_METHOD - SSLv23_METHOD - PROTOCOL_SSLv3 - PROTOCOL_TLSv1 - SSLv3_METHOD - TLSv1_METHOD ssl_with_bad_version: bad_protocol_versions: - PROTOCOL_SSLv2 - SSLv2_METHOD - SSLv23_METHOD - PROTOCOL_SSLv3 - PROTOCOL_TLSv1 - SSLv3_METHOD - TLSv1_METHOD start_process_with_a_shell: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run start_process_with_no_shell: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run start_process_with_partial_path: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run subprocess_popen_with_shell_equals_true: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run subprocess_without_shell_equals_true: no_shell: - os.execl - os.execle - os.execlp - os.execlpe - os.execv - os.execve - os.execvp - os.execvpe - os.spawnl - os.spawnle - os.spawnlp - os.spawnlpe - os.spawnv - os.spawnve - os.spawnvp - os.spawnvpe - os.startfile shell: - os.system - os.popen - os.popen2 - os.popen3 - os.popen4 - popen2.popen2 - popen2.popen3 - popen2.popen4 - popen2.Popen3 - popen2.Popen4 - commands.getoutput - commands.getstatusoutput subprocess: - subprocess.Popen - subprocess.call - subprocess.check_call - subprocess.check_output - subprocess.run try_except_continue: check_typed_exception: false try_except_pass: check_typed_exception: false weak_cryptographic_key: weak_key_size_dsa_high: 1024 weak_key_size_dsa_medium: 2048 weak_key_size_ec_high: 160 weak_key_size_ec_medium: 224 weak_key_size_rsa_high: 1024 weak_key_size_rsa_medium: 2048 revelation-revelation-0.5.5/.github/000077500000000000000000000000001423125252400173775ustar00rootroot00000000000000revelation-revelation-0.5.5/.github/ISSUE_TEMPLATE/000077500000000000000000000000001423125252400215625ustar00rootroot00000000000000revelation-revelation-0.5.5/.github/ISSUE_TEMPLATE/bug-report.md000066400000000000000000000013651423125252400241770ustar00rootroot00000000000000--- name: Bug Report about: provide information about a problem title: labels: bug assignees: '' --- ## Overview [TIP]: # ( DO NOT include screenshots of your actual database! ) [NOTE]: # ( Give a BRIEF summary about your problem ) ## Steps to Reproduce [NOTE]: # ( Provide a simple set of steps to reproduce this bug. ) 1. 2. 3. ## Expected Behavior [NOTE]: # ( Tell us what you expected to happen ) ## Actual Behavior [NOTE]: # ( Tell us what actually happens ) ## Context [NOTE]: # ( Give us any additional information you may have. ) Revelation - VERSION Revision: REVISION [NOTE]: # ( Pick choices based on your environment ) Operating System: Fedora/Debian/Ubuntu Desktop Env: Gnome/KDE/XFCE/Mate/Cinnamon Windowing System: X11/Wayland revelation-revelation-0.5.5/.github/ISSUE_TEMPLATE/feature-request.md000066400000000000000000000006771423125252400252370ustar00rootroot00000000000000--- name: Feature Request about: tell us about a new feature you want title: labels: enhancement assignees: '' --- ## Summary [TIP]: # ( DO NOT include screenshots of your actual database! ) [NOTE]: # ( Provide a brief overview of what the new feature is all about ) ## Examples [NOTE]: # ( Show us a picture or mock-up of your proposal ) ## Context [NOTE]: # ( Why does this feature matter to you? What unique circumstances do you have? ) revelation-revelation-0.5.5/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000013271423125252400232030ustar00rootroot00000000000000[NOTE]: # ( Describe your changes in detail, why is this change required? ) [NOTE]: # ( Explain large or complex code modifications. ) [NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" ) ## Screenshots [TIP]: # ( Do not include screenshots of your actual database! ) ## Testing strategy [NOTE]: # ( Please describe in detail how you tested your changes. ) ## Type of change [NOTE]: # ( Please remove all lines which don't apply. ) - ✅ Bug fix (non-breaking change that fixes an issue) - ✅ New feature (change that adds functionality) - ✅ Breaking change (causes existing functionality to change) - ✅ Refactor (significant modification to existing code) - ✅ Documentation / other (non-code change) revelation-revelation-0.5.5/.github/workflows/000077500000000000000000000000001423125252400214345ustar00rootroot00000000000000revelation-revelation-0.5.5/.github/workflows/linux.yml000066400000000000000000000014601423125252400233170ustar00rootroot00000000000000name: revelation CI on: push: branches: [ master ] pull_request: branches: [ master] schedule: # run every 7 days at 13:37 - cron: '37 13 */7 * *' jobs: ubuntu_build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Check with Bandit run: | pip install bandit bandit src/ -r -x src/bundle/luks.py - name: Lint with flake8 run: | pip install flake8 flake8 src/ --count --select=E1,E20,E23,E26,E27,E30,E40,E70,W391 --show-source --statistics revelation-revelation-0.5.5/.gitignore000066400000000000000000000007771423125252400200420ustar00rootroot00000000000000*.*~ *.in *.gmo ABOUT-NLS Makefile INSTALL aclocal.m4 autom4te.cache/ compile config.log config.guess config.rpath config.status config.sub configure data/info.olasagasti.revelation.appdata.xml data/mime/info.olasagasti.revelation.desktop data/schemas/org.revelation.gschema.valid install-sh missing mkinstalldirs po/.intltool-merge-cache po/Makevars.template po/POTFILES po/Rules-quot po/revelation.pot po/stamp-it po/stamp-po po/*.header po/*.sed po/*.sin po/*.gmo py-compile src/lib/config.py src/revelation revelation-revelation-0.5.5/AUTHORS000066400000000000000000000032721423125252400171130ustar00rootroot00000000000000Erik Grinaker Main author Mikel Olasagasti Uranga Current maintainer Code Contributors ================= Thomas E Jenkins Ported from gnomevfs to gio Ported from gnome.ui to gtk Alfredo Beaumont Screensaver lock integration Stefan Völkel Debian maintainer Ben Walsh Patch to sort all entries alphabetically Jeroen Wouters Add transparency to applet Javier Kohen Fixed crash in XHTML exporter Devan Goodwin Added SplashID CSV import John Lenz Added LUKS file import/export Andreas Sliwka Applet option to show/hide search entry Wade Berrier Don't crash on missing theme icons Arjuna Del Toso Bitwarden Web Vault export Miquel Garriga Migrate to Python3 and GTK3 & Multiple fixes Germán Poo-Caamaño KSP, Meson port, Gtk.FileChooserNative and multiple fixes Translations ============ Catalan David Planella Chinese Tao Wang Czech Zbyněk Mrkvička Finnish Ilkka Tuohela French Olivier Berger Gilles ACCAD German Christian Sagmüler Daniel Schindler Lithuanian Remigijus Jarmalavičius Swedish Daniel Nylander Russian Aleksey Klimov Алекс revelation-revelation-0.5.5/COPYING000066400000000000000000000431371423125252400171020ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. revelation-revelation-0.5.5/ChangeLog000066400000000000000000000000741423125252400176120ustar00rootroot00000000000000ChangeLog will be built from hg repository during make dist revelation-revelation-0.5.5/HACKING000066400000000000000000000006021423125252400170240ustar00rootroot00000000000000RELEASE ======= - update version number in meson.build - set release name in src/lib/config.py.in - update data/revelation.metainfo.xml.in - set release date in NEWS - update AUTHORS - create git release tag - make dist - add release on web-site - announce on web-site - announce on revelation-announce, revelation-list, and gnome-announce-list - announce on freshmeat and gnomefiles revelation-revelation-0.5.5/NEWS000066400000000000000000000465641423125252400165550ustar00rootroot000000000000002022-04-24: Revelation 0.5.5 ============================ "Txoria nintzela sinistu nuen, sinistu" Bugfixes: - Fix building with >=Meson-0.60 #87 [Jay Faulkner] - Fix importing GPass-0.5.1 files #72 [Miquel Garriga] - Fix Metainfo errors reported by Debian Translation: - Update French #74 Others: - Code changes based on flake8 and bandit - First Meson only supported release [Germán Poo-Caamaño] 2020-10-04: Revelation 0.5.4 ============================ "Drifting through the marsh we made it just outside the bend" New features: - Keyboard Shortcuts Page (KSP) available #39 [Germán Poo-Caamaño] - Port to Meson build system #55 [Germán Poo-Caamaño] - Migrate from Gtk.FileChooserDialog to Gtk.FileChooserNative to avoid having to grant full $HOME access in Flatpak #27 [Germán Poo-Caamaño] - KeepassXC CSV importer #67 Bugfixes: - Fix importing / exporting issues #62 #63 #64 #65 #43 [Miquel Garriga] - Fix opening multiple revelation from console #46 [Miquel Garriga] - Restore Key_Escape accelerator in searchbar #46 [Miquel Garriga] - Close button now closes file, doesn't quit #47 Translation: - Update Basque and Spanish translations Others: - This will be the last version with autotools support, next release will drop autotools code. Future releases will only support Meson. - Multiple cleanups #51 #54 #59 [Germán Poo-Caamaño] - Update searchbar code and improve usability #44 #45 [Germán Poo-Caamaño] - Change desktop file categories #61 [Matthias Mailänder] 2020-09-13: Revelation 0.5.3 ============================ "Gora mirotzak!" Bugfixes: - Fix moving multiple entries #30 [Miquel Garriga] - Fix CSV and HTML export #31 - Fix missing icons wiht icons from Inkscape #32 - Fix crash when right-click on entry details #33 #35 [Miquel Garriga] - Not able to import/export old Revelation1 files #41 Others: - Migrate from PyCrytpo to PyCryptodomex #13 [Miquel Garriga] - Install path changed from pyexecdir to pythondir #36 [Robert-André Mauchin] - Use pycryptdome's PBKDF2 instead of own library #40 - More changes to adapt to Flathub and Fedora - GTK3-3.22 is required now 2020-09-04: Revelation 0.5.2 ============================ "Back to chaos" Bugfixes: - Fix #24 [Miquel Garriga] Translation: - Update translations Others: - Change AppData install dir for Flathub 2020-08-30: Revelation 0.5.1 ============================ "Cadi Cadi" Bugfixes: - Fix #21 [Miquel Garriga] Translation: - Add Polish translation - Updated Dutch translation Others: - Remove python-dbus dependency 2020-08-10: Revelation 0.5.0 ============================ "No estaba muerto, estaba de parranda" New features: - Code migrated to Python3 and GTK3 #11 [Miquel Garriga] - Bitwarden CSV exporter #8 [Arjuna Del Toso] - Migrate from Intltool to Gettext [Mikel Olasagasti Uranga] Bugfixes: - Fix 256x256 icon #5 [Matthias Mailänder] - Fix autoload when file has special characters #3 #11 [Pieter Ennes] Translation: - Update translations Others: - Remove applet code - Use Makefile macros when using sed [Germán Poo-Caamaño] - Remove unused code [Miquel Garriga] 2012-07-01: Revelation 0.4.14 ============================= New features: - Added a new file encryption format using PBKDF2 #61 [Mikel Olasagasti Uranga] - Warn users about old file encryption format being non-secure - Moved applet to own dir to fix 'make dist' Translation: - Added Dutch translation [Dirk Dierickx] - Updated Basque, Spanish, German, Brazilian Portuguese, Estonian, and Russian. 2012-05-27: Revelation 0.4.13 ============================= New features: - Added VNC and RDP entry types and open both with vinagre - Added CSV exporter #12 [Gergely Nagy] - Added email field to website entries #19 - Added option to use punctuation characters when generating passwords - Remove autogenerated files [Tristan Heaven] - Use system cracklib instead of the old bundled python-crack [Tristan Heaven] - Rework the export in a plain text file [Pierre-Yves Chibon] - New SVG icon #71 [Frederik Elwert] - Added notes field to entries #6 #68 [jfrias] Bugfixes: - Fix crash on LUKS code because of a typo - Fix export to Password Safe #13 [Stuart Rackham] - Allow import from files with no pad charachters from gpass [Paul Dokas] - Gettext strings from revelation.in and revelation-applet.in were not exported by intltool-update. Renamed both files to have .py extension - Fix multiple locks after being blocked by screensaver #74 - Warn user about the password length [Stefan Völkel] - Fix applet icon on start. Debian #603572 [Stefan Völkel] - Don't quit if escape is pressed in the 'Save changes before quitting?' dialog. [Raúl Gutiérrez Segalés] - Fix NoneType error if datafile is not yet defined [Stefan Völkel] - Replace string Exceptions by proper ones on LUKS. [John Lenz] Translation: - added basque translation [Mikel Olasagasti Uranga] - added spanish translation [Mikel Olasagasti Uranga] - added estonian translation [Rivo Zängov] - added portuguese (Brazil) [Joacelio Moura de Lucena] - updated german translation [Tobias Quathamer] 2011-11-12: Revelation 0.4.12 ============================= New features: - ported from gnomevfs to gio #5 [Thomas Jenkins] - ported from gnome.ui to gtk [Thomas Jenkins] - made desktop file translatable [Mikel Olasagasti Uranga] - Entries are now sorted alphabetically [Ben Walsh] - Create .xz on make dist [Mikel Olasagasti Uranga] - Added support for locking when screensaver is activated #14 #42 [Alfredo Beaumont] Bugfixes: - fixed crash in XHTML exporter [Javier Kohen] - fixed crash when saving file after certain imports - fixed crash when searching on some systems - fixed crash when entering insecure password on some systems - fixed crash in applet #3 - removed deprecated tooltip system #20 [Thomas Jenkins] - fix missing icons using similar ones #46 [Mikel Olasagasti Uranga] - fix url label max size to 60 chars #45 [Mikel Olasagasti Uranga] Translation: - added finnish translation [Ilkka Tuohela] - added russian translation [Aleksey Klimov] - added swedish translation of desktop file [Daniel Nylander] - added lithuanian translation [Remigijus Jarmalavičius] - added catalan translation [David Planella] 2007-01-16: Revelation 0.4.11 ============================= Bugfixes: - fix applet configuration checks Translation: - updated czech translation [Zbyněk Mrkvička] 2007-01-16: Revelation 0.4.10 ============================= Bugfixes: - don't import missing mman module in applet 2007-01-11: Revelation 0.4.9 ============================ Bugfixes: - fixed translation of field names and tooltips - don't include built config.py during make dist - added POTFILES.skip to skip translation for certain files - set utf-8 encoding for POTFILES Translations: - added czech translation [Zbyněk Mrkvička] - updated german translation [Daniel Schindler] 2006-12-31: Revelation 0.4.8 ============================ New features: - translation support - ported to gtk+ 2.8 and gnome 2.10 - added LUKS file import/export [John Lenz] - added SplashID CSV file import [Devan Goodwin] - cleaned up preferences dialog - only show Revelation files by default in open and save dialogs Bugfixes: - improved error detection during file saving - handle errors while loading icons [Wade Berrier] - scale icons with improper sizes - use new icon for ftp accounts (old one removed from gnome-icon-theme) - fixed crash when doubleclicking tree with no entry selected - password generator now always avoids ambiguous characters - password checker and generator follow "show passwords" preference - don't use passwords in default goto commands - HIG fixes - added missing config.guess and config.sub autoconf files Translations: - added chinese translation [Dancefire] - added french translation [Gilles Accad] - added german translation [Christian Sagmueller] - added swedish translation [Daniel Nylander] Code changes: - improved build scripts - generate ChangeLog from subversion log during make dist - removed gnomemisc module - don't use deprecated gnome-python modules - moved convert_entry_generic() to the Entry.convert_generic() method 2006-02-06: Revelation 0.4.7 ============================ Bugfixes: - don't crash when unlocking file - ignore errors when automatically reloading file in applet - avoid hanging on missing network mounts when opening file - build pyc/pyo files correctly when using DESTDIR with make install 2006-01-26: Revelation 0.4.6 ============================ New features: - improved the searchbar, and use it instead of find dialog - new applet option to show/hide search entry - use icons instead of colors in password entries to indicate strength - added Shannon entropy test and other improvements to password checker Bugfixes: - fixed drag and drop undo/redo crashes - don't initialize python modules during configure checks - strip xml entities from password on clipboard copy or drag/drop - fix crash in Password Safe import/export with fields longer than 256 chars - use full path when starting Revelation from applet - use correct key path for applet show_passwords gconf schema key - ~ in filenames will now be expanded to homedir - changed default file format for export to XML - changed button "Edit" to "Update" in edit entry dialog - remove GNOME_RevelationApplet.server during make clean Code changes: - use stock gtk icon sizes instead of custom ones 2005-08-25: Revelation 0.4.5 ============================ New features: - added Password Safe 2.x import/export - added Password Safe 1.x import/export - added GPass 0.5.x import/export - added MyPasswordSafe import/export - added MyPasswordSafe import/export for old file format - added Password Gorilla import/export Bugfixes: - fix crash when searching with non-Unicode locale - fix crashes in applet and with drag/drop on 64-bit systems - encode data as Unicode when loading from files - more informative error messages for gnomemisc module - fix incorrect magic string in MIME-type entry - fixed a bug when importing GPass 0.4.x files with empty note - GPass importer handles multi-line notes correctly - GPass importer skips hostnames containing only http:// - set correct app version number in datafile header - default lock timeout for applet set to 10 minutes Code changes: - check for necessary python modules at configure-time - don't use unnecessary defsfiles when building gnomemisc module - improved the applet name and description 2005-08-07: Revelation 0.4.4 ============================ New features: - GNOME panel applet for looking up account info - option for copying password to clipboard on doubleclick - passwords are removed from clipboard after 60 seconds - drag-and-drop from password labels when hiding passwords - new "Add folder" item, instead of adding folders through "Add entry" - rearranged toolbar layout - option for setting toolbar style - the searchbar entry gets focus on startup if shown Bugfixes: - don't crash when attempting to load missing theme icons - properly handle all gnome-vfs errors when reading/writing files - password labels are unselectable when hiding passwords - don't warn about missing config data when schema install worked - avoid showing duplicates of non-modal dialogs - HIGified labels in dialogs - install modules into platform-specific pyexecdir instead of pythondir - don't use deprecated gnome.vfs module with gnome-python 2.10 - properly quote autoconf macro names Code changes: - removed unit tests - moved Timer class from ui module to data module - moved the wrap/ directory to src/wrap/ - renamed the authmanager module to gnomemisc - wrapped panel_applet_request_focus() 2005-03-31: Revelation 0.4.3 ============================ New features: - added quit button to unlock file dialog Bugfixes: - don't wrap gnome_authentication_manager_dialog_is_visible() (only available from libgnomeui-2.7.92) - make configure search for cracklib-format, cracklib-packer, crack_mkdict and crack_packer as well as the normal commands - stop autolock-timer when manually locking file, to avoid crash when timer tries to re-lock file 2005-03-22: Revelation 0.4.2 ============================ Bugfixes: - don't use gtk.Action.set_sensitive() (API from gtk 2.6) - check for mkdict/packer under /sbin and /usr/sbin in addition to $PATH 2005-03-21: Revelation 0.4.1 ============================ New features: - option to autolock file after a period of inactivity - check password strength while entering, using cracklib - ask user to reload file if it is changed outside revelation - added preference to select doubleclick action; go to, or edit - added password checker dialog - improved the preference dialog - improved user interface for copying passwords (and optionally usernames) to the clipboard Bugfixes: - use correct encoding in data files - workaround for incorrect data file encoding (as generated by 0.4.0) - make undo actually work for edit actions - don't crash when redoing an undone edit action - don't crash when unable to save file (wrong permissions etc) - don't crash when loading missing icons from theme - fix potential crash on quit with some pygtk versions - workaround for gnome-python bug causing crashes on 64-bit systems when changing a preference - workaround for gnome-python 2.9.x crasher bug in the session client - properly handle invalid data in data files - prefs, password generator and search dialogs are no longer modal - display non-ascii characters in filenames correctly - use fallback folder icons when not found in theme - hide any open dialogs when locking the file - don't steal clipboard events from widgets in main window - update icons on theme change - use better lock icon - use better stock icons for dialog buttons - left-align labels in link-buttons (for URLs etc) Code changes: - cleaned up the build-system and source file layout 2005-02-08: Revelation 0.4.0 ============================ New features: - added export to plain text Bugfixes: - treeview keyboard commands caused unhandled exception - autosave file on drag/drop, if enabled - set default button for overwrite dialog to cancel - added configure switches for disabling mime and desktop update - respect --disable-schemas-install configure switch - build byte-compiled datahandler modules 2005-02-01: Revelation 0.4.0-pre2 ================================= Bugfixes: - allow entry drag'n'drop to folder directly before/after entry - crash when undoing an entry drag/drop under certain circumstances - place Revelation under Accessories in the GNOME menu (Utility category) - install mimetype icon into correct directory - run update-desktop-database on install, to register app for mimetype - don't install authmanager module into bindir - build authmanager module with position-independent code - allow installation when fd.o shared MIME utils are missing - don't update MIME databases at build-time if DESTDIR is set Code changes: - updated unit tests for ui module 2005-01-24: Revelation 0.4.0-pre1 ================================= New features: - port to gtk+ 2.4 (new file dialog, combobox etc) - file handling uses GNOME VFS (can open files over http, ftp etc) - use icons from the active GNOME icon theme - improved widgets when editing entries (dropdowns, fileselectors etc) - drag and drop of entries in tree - files can be dragged to Revelation to open them - the account clipboard is shared between Revelation instances - an account password chain is copied to the clipboard when launching entry - added menu item for copying username and password chain to clipboard - username and password can be copied to clipboard, even when hidden - default action for entries is "go to" - integrated with gnome session manager - new application icon - added icon and mime-type for the data files Bugfixes: - quit works correctly after continuing from an unhandled error - gtk/gnome command-line arguments are handled correctly - don't subclass gnome.ui.HRef (abstract widget from gnome-python 2.9.x) - fall back to False for GNOME toolbar_detachable setting - renamed "launch" to "go to" Code changes: - rewrote and cleaned up all code - improved the module APIs - added unittests for config, data, datahandler, entry, io, ui and util modules - removed libxml dependency (uses xml.dom.minidom from python instead) - reorganized source file tree - use GNU autotools for installation instead of python distutils - use GtkUIManager for UI generation and management 2004-09-27: Revelation 0.3.4 ============================ Bugfixes: - the Domain field had the tooltip set as its name - the searchbar follows the detachable toolbar setting in gnome - ask to continue running when an unknown error occurs - activate searchbar button when hitting return in the entry - workaround for crasher bug when editing an entry on some systems 2004-08-30: Revelation 0.3.3 ============================ New features: - added entry launchers - added a search toolbar (disabled by default) - added a password generator dialog - added an XHTML/CSS exporter - unknown errors are reported in a dialog with an error call traceback Bugfixes: - entry descriptions were not set when adding/editing an entry - changed the keyboard shortcuts for add, edit and update entry to use the control modifier key, to avoid overriding other use of the keys. the old keyboard shortcuts can still be used when the tree has focus Code changes: - created subclasses of Entry class for the various entry types - created subclasses of Field class for the various field types - added config_get() and config_connect() convenience functions 2004-08-09: Revelation 0.3.2 ============================ Bugfixes: - don't attempt to load the removed druid module on startup 2004-08-08: Revelation 0.3.1 ============================ New features: - added a preference for autosaving data on change - added import/export of .netrc files - added import/export of GNOME Password Manager (gpass) files - replaced the import/export druids with normal file selectors - window size and position is stored on quit - default type when adding entries is Generic - vertical scrollbar only displayed when needed - most dialogs can be closed by pressing Escape - the OK button in password dialogs is ghosted until passwords are given - removed schema installation from setup.py to ease packaging Bugfixes: - the preferences and import/export druids crashed on some systems - the gconf schema is checked on startup, and reinstalled when needed - fields containing & were not displayed correctly - file selector was opened when saving file in quit confirmation - spin buttons would not accept input from the keyboard - missing parent directories are created when saving files - added access keys to popup menus - file selectors and the about dialog set as transient for main window Code changes: - rewrote data handling to use new Entry and Field objects, and improved EntryStore, UndoQueue, DataFile and other related systems - data handlers split out into separate modules - rewrote the configuration handling, using a new Config class - merged application UI and functionality classes - cleaned up dialog and ui code 2004-04-06: Revelation 0.3.0 ============================ New features: - integrated password generator - gconf integration - new preference dialog - option for automatically opening file on startup - option for hiding passwords - an opened file can be locked - many small ui and usability improvements Bugfixes: - the Figaro's Password Manager importer failed on empty fields - the password dialog allowed passwords longer than the keylength of the encryption algorithms, causing them to fail Other changes: - complete rewrite of some components, and major cleanups of others - removed the Usenet account type revelation-revelation-0.5.5/README.md000066400000000000000000000032301423125252400173140ustar00rootroot00000000000000# ![revelation-logo] Revelation Revelation is a simple password manager for the [GNOME 3 desktop], released under the GNU GPL license. It stores accounts and passwords in a single, secure place, and gives access to them through a user-friendly graphical interface. The project website is located at https://revelation.olasagasti.info. ## Install - Fedora ```bash dnf install revelation ``` - Flatpak ```bash flatpak install flathub info.olasagasti.revelation ``` ## Build Revelation depends on the following software: - GTK3-3.22 - PyGObject - Python 3 (currently working on Python 3.7) - pycryptodomex - libpwquality To build revelation first `cd` to a suitable location and run: ```bash git clone https://github.com/mikelolasagasti/revelation.git ``` ### Build with Meson Navigate to the directory where revelation source has been downloaded and type these commands: ```sh $ cd revelation $ meson setup --prefix=$HOME/.local _build $ meson install -C _build ``` Meson will build revelation in the `_build` directory, and install it in `.local` in your home directory, which is the best option for local installs in Debian or Ubuntu systems. You can choose whatever prefix you like, like `--prefix=$HOME/install`, but because the installation directory may be non-standard, to run revelation you will have to define some environment variables. In this example: ```sh $ export XDG_DATA_DIRS=$HOME/install/share:$XDG_DATA_DIRS $ export PYTHONPATH=$HOME/install/lib/python3.8/site-packages ``` and then run revelation: ``` $ $HOME/.local/bin/revelation ``` [revelation-logo]: data/icons/scalable/info.olasagasti.revelation.svg [GNOME 3 desktop]: https://www.gnome.org revelation-revelation-0.5.5/TODO000066400000000000000000000035641423125252400165370ustar00rootroot000000000000000.5.x: - make password drag/drop work with mozilla/firefox - port to gtk+ 2.8 / gnome 2.12 - ellpisize labels in data view with gtk+ api - bugfix: make autolock filter trigger on certain events only (needs pygtk bug #156948 to be fixed first) - check errors when opening files from dav:// urls - port HIG-improvements from sputnik - detect XDG prefix and install mime/icons to correct dir - restructure the configuration layout - fix insane constant polling with gnome-vfs monitoring (http://blogs.gnome.org/view/ryanl/2006/07/27/0) 0.6.x: - ensure complete UTF-8 support - fix unicode encoding/decoding on import/export (this also means encoding/decoding the file password) - improve the file format - remove namespacing for field identifiers - add a unique id for each entry (md5sum or something) - xml namespace (can identify xml type in fd.o mime system) - add note / comment field to accounts - add remote desktop account type - add im account type - clean up the account types - possibility for custom account types - custom launchers - account type for cd-keys (games, apps etc) - "file" account type - stores file path and password, launches app based on MIME-type on "go to" - file merging (union - this *really* need unique entry ids) - sorting of the tree - add a dropdown widget for list fields (like email protocol etc) - recent docs - add import/export of GPasMan files - add import/export of zsafe files - add import/export of gnukeyring files - add import/export of web confidential files - add import/export from browser (firefox, mozilla, epiphany, galeon) - searchable notes? 0.6.x: - misc command-line arguments - terminal-friendly frontend (curses-based?) - dbus-server for getting/setting account data - accessibility improvements - help / documentation 1.0.x: - attempt full HIG compliance - misc polishing 2.0.x: - use gnome-keyring as backend? revelation-revelation-0.5.5/authors.xml000066400000000000000000000002031423125252400202410ustar00rootroot00000000000000 Erik Grinaker <erikg@codepoet.no> revelation-revelation-0.5.5/data/000077500000000000000000000000001423125252400167505ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/000077500000000000000000000000001423125252400200635ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/128x128/000077500000000000000000000000001423125252400210205ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/128x128/info.olasagasti.revelation.png000066400000000000000000001070341423125252400267630ustar00rootroot00000000000000PNG  IHDR>a4*zTXtRaw profile type exifxڭi8f}b#``?=pw3~B^_Bʥ?r=iw?~ſן(5~^Baϯ~/?.7!^o_:o(3?.⿯ Wfi>(xRH7;y]\|) }ui8~e.9PSN(/rn}ݍ0oD{xRT+|_??bqɟz{v b9XYK5XYkRϱsy+4>y^ o\_w9EsŸq0\9U,Hx׭|ǟ?*+Xin%f su?Y/م OH%<1Uܘ@(%nsJOjl=5|%>M,DIO 9b\14J*ZUzOzS穏 7jZ[ur+i5pXko15dƙfe>6Yyk&nqu@O9ϩ~Koys~W?Z]?jA8)+s`ū+@@Gn!ʹfw$E 6KO ?VnWiu].X_j[[ߊdsz'ߟ6؆6Ȇ|)5.A}&B!9cJâ?:OJs6]d"sȮy >m-K ,@6q Y[x__i9$+1_d$A{ \,U4&gHD"?oܹ>`KeO )u P-xKvdT\*^ $ɢ\ $*jO`_2-IK ;,2gw80T޻ "9cW` !4Q}g5y Y3dr9 7m{Q='04k!B"]O_y&/^oFf;OF=XWy/> gy/t| b:}:V߉@gDrGhU3 ϽUb ہ1x}&9 "7g,XJ߀V]y9bҞaqZhe; MD29On}ǭ#|KH`Rtg.q.@DqOk#0n;.֮4|VaHr#!ƙgN暰#C*y Cҳ!ȝg Q=̐t@,9UGZWh#ZڝW?M4$'UA'26Z@bg]ڒa㾏LZ "PXddN(uoA1gdD@xW +&h@ " !UAXʯ!|RL$py{^ɔ2 .o MR5є{&"!"VYeu]@!$Ϳd+aQ#sHp-b )3)@D O]K99֐#XJbë|U(]9ve7򗪔ݟ(i>KN0>w ^跕DBFvdXJN6bZ޼C8ifdeA\=9!Qu?bEx4'kt^sDnLl]ph81G%uXI',r?^ >RxNɉłNJEfjjlc"p=JSВO(^jG0z-;\ECZ+u鞈8UJ_CP#.5`f-d%-|&PL_r@l?HC I}+ #DQx嘟z9IVKK{ok ބBY⃏dR .hEM[~g\9nU#ѡj"Ϸ8y2ȜX..] 2T UP wZ/Q"FZ"Bk!H ƴЭ|F(3 6(4! b0B ͠WҰB,LXU& gfc4bA0H ,^f! %^_^n8aVPdA/uAnB,CtT,SfPibpdU k79+Bj|53rKx@i;[ܲ%%lϘL<čDXLEhƠ3;z[` ڰn2~d<2dK}Γ2ئ)AFpf6o7>()jkں @0+}˂Q!eԿJ ID۟K [+ ^E CDU#ӘP;kKo>_->Eby2-HnGVdH?'_yG^~,$7w/I Ҝtayj57VIMw53^TIv2~ 8J!G vb( RE+ zI{Ct)##_]*xR {1Yl澋U{Vk;[7H huVҲ@ [Vue'|FACT~ h౟"835sc[K@(*KBqn.9԰`갌\f6Ckϝ 0!QU7`(x}I_~ee=1piע |țɂ4|1ް.D1gB7p%ğZY kE@ [u|?jɵgqLZ'x,|VM""MONpQlP^y;GߕA?z!Wt ̜)췘$0|cqGΜy=4Ƈi0bĪϷYxl1n2Z X#ˮWF ./7?BnK/R#X$5256 s9 Zc`E>.%~Ctaj͟5I5\Tc_HT'Dq,%eGG.Z"EMNPż u㧐1 ̿G[<(RCw5kv'}D#lorʾH #d0obG@I.1Q/Iz BQMM>> V2jmɿGyr,IJ풜]ly$z(I49 ?JɠR?.`&.ch>cs,!opuZ̲!dJ5IP%)QMe % IӉ!y"=boD=> czO`ZyX#0kh.+t%s:";)F F`b0/z>V-[L O|~sf@h+m6š`$oJ&5M@2b F(ELSϊ?+#8 ƦB> YeX">n)D _&# 1%p~Yp6[2BF8 q壹jrk[d"3W0wA3*& Iv`L@a VDh{^v'U~Wd@'^$'- ·D&Bu!;4VoxHo]4S C# bA)鳢Jz֛ bM, ̗L)aԨ!$Q77 @0x:6( Qⅎ!HD ŬZ&-.'?g &`Ös` Ah֫tQLGKQn+48;{k z̭nh!VʝtW0 FếRi [!X?IK/+pĨ700@>/+Qq1 xD2 {ύM&f?Z` ~ "%y֘`Ifq3Dž29&Jw6Pn 9_,9kg>}8\p[S(4aL/Th?[&Q*7{HOJ!YU>+@AeD6DwtQ2[£2`[ 7M M,nU|`]덁$d[ўw&}Lb1Y_gw^QC?!~Gփȣ`2?v^N#ݮ8k+ށ\x7,.\473DljQH?_䣹50jVdoNf"V'Y!D9lς|; lD&)74¹?_[F!INeDX3!Ά]IV `(|B0f;F-%إ*arJ3,З3ݻt~qwGC@n̲X)Цmgd/8 $:廱;BQ`77_„*GWG1_=2N tHeoݺK4TiP OI 6 >8>1ߜ 6+[Qd#{K5\Kc +$,?8CLGw|A8\iacʱ/ GI?'KZ,ǍXG[n jIxZ4ڪ[?%Ja߃Fsv~L9bׁwԼb GlK W#cbU5y!HfB\Gp蠡ԙXIYv cOu_~(W$OҽGΧsq"hp bw~7}bt%ns1_ٍ ǡF9ií@ap1o[V虋+9kifH௨Xv#.Qu"v_5TdoU mdJc$C)-(n"@3/{NuU,C_tލǙk+b1o}\fhoeEJVK搐W\!Y%!XG󏀏G5Jig4b aڻx~B bUyMܗcNp # #L5[-1"9..fGSǽb2eב:>>_XFCyG"Q$mĴg,k,h&S*xb/Иcr?hzY&d4H _En#,ԧ1ppSz xWaX-0YE@cʶwbdEMv=OXL-)^+@V){n%#;Csvࠖ`X1mbg0~Dp%u.~dC[=]Q΄)}7?`˴=,Vuŷs*@`A]jgëng] N5bݸ%Xf' $&fpҀdk;0I: F\hŊ&n1p? شnXĨz>ki[m狷 *#Dd3x{ weͯ{8fkS@H 7aoBQ~HP=IllXF=v5-F(6l:T9a& nG\ VZm~ ײ+`Z|ړo PralQi\i }m l[Z^ jH<&[>lU]+!C[g]jl_Sm7t =_v ߂m_h\B_eA]HpGC›8;SXnc=wN7г\"H%Fl? (L5@!lV( Bnu4ݒDxb8rUС?[ʟ$#FR녔N|C$9 ɇdYt ,qJQ7;UdnA_wkC/ILMU)OΠ!!Dno+{WJօHkC j#/ DV;o@=Aƨߏ]_nm|uhȩ#kn@'|F8^?{잛ڀR‹%n(dx΋6hy'[=SV4giaoK*%c_ͤ]De+v zdb?zڬlUԭS},OTGxc·HY m1a4|Ĕ@F3rvw FzlވdqC}M2C'x'c} P6t`tp۽B;Zo1IegXŶj}PY((* vA"U͇5<%6ϸ>U%mP=mS[.f 0L!=vq{ j!6[`>/g@\K(d%tmf&à`ߨ-/?s,M~B[62wKv Rm8?50Imw) օeG[˧yn#Rmo5en8>"x{cӧt=(_fx?)E  MK6 SA/s{Ɉg |4>*D@mуZ2XS{ p5ZQM}q2ۓ|F\e]|3'WSS <{~-Cdo p6TBVVmQ u ]gMGϿq7h`."'Ӹ)2 >=:I0c[f~t6ߦ"-\sDзiϞ-,*X"Wi af_AمٯJIdFCq1b{?.\|.'+$ zF FmxrAn%g@Z1m7)|[)Ƣ]8pUi}a w[oԺu2{,&Sڳ05N=vn lx#1 y7Qy<.V1i’thp=οݍXLG:NZxcE#6xk&ܣqGӾ">dzdLkHk>K,;̗~ܚo ݳ ''<}zP^`ڪ_n~{RE=3g5kyT>i灊={w Ḙ̑UGDh (cgق\?:k}ZOE_9 `)G!./sF6Xm |b,ΩIˎ=j4NߙmUJ`l3-Quc1W.ixƗmJBk[ַAFGKk@]iO?yۺ=g,j̋pa`)wA3b L~1d{v2R"Wnmh%0" 06VgAy??Ud+M%gȊ'-q!ϸ~cXiA|'MQ\zT*)#[!yǀį`+ үm"A} C!g^ ϿhڂPnO|yx5n73{z}~H[0 m,I"~ra.3un]Vr}XX" OXkӛBp}gyt t_Ӟ V.c(6̎PR nt<{1!7=ݷbBt&b篩Uqc U|Kiǽ8QG=DRLYgRcUr 1DK`𾯱 %TD}jOZD00vO7lOA)v`L Ia 0KmWp߽bT n-Ѯ5"!@PҁsӮ) `B۹ 1H''{s#}>g~S!7 k폰~s(g?ࣝSٿb)f&xFg;:^^Yhx?!Q;N[=AunɁad̗asƧP`=Ͽh )c>0#Dm5h@sY:hwAV!k^qE6Ya =[F{ 9)H~ w^UOm+V.$7/0;' 'i6Dks^Hg35Q(J Nv7|]wJƓ/p׳a:'$[&Qߴ`MI0%C$ak< ^ބ6z}`k5{$.n[煛X3zv;>nd/Z84|5߻}\em(%I G^w\⯼?Yo'3dkq_ GXd<=BQE&x/=eHBs=5<j>Px@+e=^EPm;~?r__ FAI%Qp]mr?o}YA@l.-K,xJhb#a"ګI+Gl|T|65g꾣Pqc:%^ېV/Qh/L%Xţy:0Dп{:!u Jvt& >3g Tk[?*;8dNDEt*BZu0 4$).kbYWWA|89:)H&1^8܏sT38eq!]BB}T339QLs}Qr&|, xxj9GXQRωG jo yfH#B6fEC%$*F -jʚ}s2ש" B*J(Bv):{H.\%0r,߳5nR8t05> xR?Iл \\4ytɐ)@3, tskHӬ7!0Ruww;M:rq*bKGDC pHYs+%+%UtIME *x[ IDATxw$u߿i'avg6/e b$yg8SQQ9* ɰesΓs\{Y]Vk_]]]]7|c "gtiB5a!HɸKɰaࠔp28mG_/z/a]M&a *xQ7m* _mٲO-U*hlg~]r;E'Re /|Nmn௸~!u|>7gR32)*tqm*"24udJ#JH G^ZދRJxtc9V-|7Bk6JYY>.YEf B DEPt)..)%T?8(Mua !ذ;خf>`~)O+GQ8iSd8ZP]T"NӤI$R]H$I &6'Rhcƽl|a hʷ7nц4y>z>Tf5/K0oN N$\X49q]&Tlt:c(\[ϥs٬=[.!L@ng'RiN-_~e x۹TP4XX1q;_%KnSU$swPiZMݸ7x?w2qi>8M.͹hyP懠yZuqz1?o-.M7DZt !)ҺDt7PU`ڒ$'4?zѡ,OAYQsGVT2~n߹UgZbqNt0x<~SZX};i=Ȳ.X`qZqHk2'_;-L&Ya/mn.XsLbr"rֱ4S=hX:/YǺMU-}^k&ţ`{:|bŧ.R< !ÞK_^Ϫ3?5oeъ&u c^zFLH|in k_ȉvf]LBu)QBZFd u6WD5Mchx]>F(-&"|Kdez˖V>EQ>UoY*9;ppiu5#i>Eph*s_^Gjc}}-\n2&.Q_+wG$K`Zl.wg9wQprnOApVrAu,'b%>JClQή=_yRʊVt2K˿_\AY".\5 wjUU}KUբ::^[@9wĿ*!xpl*?.Z=ʷlݶ']PӦ( v9- wg_&yy!%MB[wq7W[u~uTT Ac(2acmwbY !$#!VS[׎a,]z*pDgtt\0W7s^3 WW++q8fqUE0ȆC*)s!B0"B"] ͚˒p:'II&) GZeMz]!'+HiT zgY3b4/= |Xp)y.H-v`̩-kP_%^[o~!y)%Tn=":*r/PE8l- M߈+$!L"Dv}&c 0THIueVy!ýDq饲i%=-TWS2)Ocu0^LEɒ P5!^y@w\P]tS{cX_6ۿCN.#kI%۰-ֱסP9"҄Qf1e99dI,f76_G~YKj5p%+d0c)+Ͱ'*d@ Tў!,}{Q\&)y;vݗq'PV'I ϩRRxm/4<6 u,,iM|y5Y~zێ7`nMMMe^bfw &0 =3@Ji>'DQ3J= u;gFUe>bAs%RwB]y>kCSRH$lf5ԢE3y-cvtԧwtly$HhXzތ3[;,/+=-6c fM a2 QIk:qvGщL5" 0 yF%r(࣡iSzmllJ&y=B3ÿ.[v9/qYK0PZq.0󗧞xKi2Bz2\!r$^c={` :OJI80ky3:P- !W"fVOg;ʾMidۈ$]~ s#~V^&'$A&>/>ƾ=go좳$љnǃR)n}ݰ'M|M|[=-.}xxJrW3 ]XTpI{uwO!+7UO.q9T=Nmi~7y2&G_kB;Fgg7p#?"Kdŋr !(sLu|1c}'es:ccc~\sCa"/4a{@UE9yQk|d4̿۷9|9wHBqQVfUH:g^,.XfS${Δ?Go4[p'>[S4(-Oc ٯd?#xqS~__œWĈ =0P91$# VN'2@J}Cq|>9/,:%A9 0Zf+'y8GGss@".LU}70j7;'6̔+Φ*@|(H]M9PVQc]^Ϛe6Jț, ,| Rž~;  ^}if.&zΠSI¬2%yS?* t X7zm+Ha|fZ$Sٕg%ac t5AOlEgm45}89),h/| %|/t'n ]?6Ɵ)i_SU&" ]L$+;/['i̍x^)xﻰaլ n2QxRj.;OL([8d2/:k .uc%oZ,Z"q HR9E-|z?CdzI / :wfI0D(++ωX*µ6s ™nOyҽgFFC8^`Y@!'[W3ښ* Gb\.M›$60Eu~l:IR \mEx,֭[صk'ǎ,)$T8WPXX4Ԗqh q7JPɌhڲen30mZ9N`_Cwou={3`nUb/Ax!΀)B~׳\Ϟ:=@t ظit$bl6;0xT*cG9z(~QSW[wyT*g(N];͍9b1^#`L~ (JY9wkY~t 6Ui[LkZ(l>2 <4sb )!2Ei/A'7"slܯ :2?I̜1bv{NQG2b`V6oDgW'e},Y{=l⺓O}୯'/Ƭ2zzp:\.^/RJjk+I&pR>c`)XxƔ)|Gmڏ+nUQ!e՚#+;O lNHt?Ɓbp@< 8VLQ$^'ڻ&t}N$TfYca%D]kg׎TVTr0~eI ietP^VNYiKgfl޼#G}g4(/-6z~;o]5qI};u{7Ғbn|JH$"8>3/+M7]9~x'Z>lv٩%&T(erȩ&Kg.)f'{"u%+&bY>8O>#N=w=wQXXd`~FFDHRl6C=̝;z>[lv=2 T@Me^9>.WX'P#l*aqX /+wtl710$y.9yn>2n~ (KNM]Ijhh:yN<-tm1K7chy_1Ӂ[>ͲeQm6ҩ4]9zN"a≘e)cii=N[{ h jcz >}mՓL%wwߞSrvQa>~}]K-hU?Ź/ L2Vph[h STlx;ߩ2Ӽ** O0IYĔxz~ճ21Kw&ߋ2be&5]I}ZtO}W"sGe]gHwav;7| 5 Na,<(ڰ6X(*b3$tuχ>!fΘI:SRJ> AONP)0]\(Dq4 4.e3+R݅5g!j)/gdZͱ ri462%Ƅ=>= d)_FH֣{8s=B>QRRtv30Ї(l6Uذ*bSv-UUQPUbQ:;z~}(*.f||_3+?y8kr<9%P5e5<@?Bu _ЗUwa?##PJϟ7\)qU.wz9 IDAT]qn/ ѳ >#n^C+\AC) MbJ@frR_ ֊BOi]qE Xj5fBUUGp=(BZK40!s{#Ph9oCyy^c?JEYl[ # l'RtR^fG#aF|i㴏.׫Pȴt72|MOoz]<ķq897;?@sʅ%\{CtiT4ھ3mdFd s%kxF"PB+7/ulF^эhC1 TR7Fb3&3w]5!&Bx]^"Wcf&^?uT99}liidx 8wnւY'}xOo? W(:J藂1k  -UACIH.@(Mm8R)_R8}%lDГ}$;w2:Pmui$LJzzkK~q+`򕸜NJ%.YKn1s$o)BsPTU dnR!=)%CCU) *&qRZTF> "!@3e"34ZT[FZ9%.^CA۱{k"?=ՇLE116 PuR^`hûط}h$M r[W伅 |lu]:> lϖE$$22GU~Nf ֶ⫸]Ćw\GUR8Dt*J4 I$Jccs2̮ à(_{CCC+_7~!C!DcQ@Jt4l 5tTZC5FZO4Zz"[N%dueOI;=/y-/HFdRSAU m3_hA'vqHLKS*dVPG1W Ty% D4ms'j ͪlp#q~< zG9ү?ښ30d= $Mqq<.UY-UXl l Wg0;(cv0oiTX?PJ0"N2}ZJ"eJ~|^ x(tJ1z}D"c!p88.id2nߪf}}'UnWL Nɤ&rI/w?2|S3z138q“F(<̜<@bَ-4uC  >"4W^~UU###H$ sv\s>F y鉉tóXhH62J)25eCQ9E=HB\.Me,"lyu cFpU57|l É8NFiiv UAFQ==<=4E2Hh[IvrgRbg^nd#̮+cyC!oYT2%Oy=r IsIRGimh_8XT0ٶ1'ؔkFQ 䙼ygWUk߅l9Eq"DK=v| D#.!]d#̡l>ƣPCx=>;w=(4@($I7#m;v <N EN>i UQq8nTU!rT:u9:rIU*>(WONnhOQZ:zX< m4- NDlߤ(G鸛TMaA!RJzz'Y,;DUU>?P>|C8cH)ioog<:NT#ٻw/.knߍ&cIRP={r9tww3g#(Bj$TU99nr>mt;S|XJ SRĦ n;X~#+U3‹i{qr~<A#)E6_w΂׼|Њ3,H_ԸMWR222mfnJKx;8/UCÃ91y@,ftawwq^/+_ncs C25յ9$9ЫS0HAKIXǺƼF4RO;ϸ7PJa;e繦 = Ϋ R]=g(/kcQmS4I2%g$Y/>E'N3g c3vk B`>e(bYB|,|"TTP(i3q=H$O>${A?ڥUtJ+ұ y^HI*bt:aCjM/E~?pW?,v%M5gE)sK$6@z-c/xFƫ G05U,X)%?ٽgYF壪?EpaU: %OQfP_7Ӊuxq~)fj0TD)Mῼ@5f0:{#"|M?+sgDƢ #uMUz9ռ$0v jN.͙g:nYu#] N6 zjuN|It]G(((Pא"j! f5420`|<~~'Dr"%@W_s /۶mc-\멯fв6*3Xh۲ezO$Fƭv5u9GNt믩{j-g]Q(/3ct=3LLxۭbd[g7xdT.; *odF 3:4@ @ ͛7YX~NɑlR_Noo߿|?ņ3UA&ΛJ&_{PZ#IQ׭mid(^wT Dx7翴b@Tmw NJqEPl+fc NyL.\ή.\xx<^B|&j :al,Bikn;BWWFAYY98n"0tt.BGK ܏競@mf.-$`$O:U!)ڏue={9Ef\R F'ϴUV̻?2iTZ-$:H^9޽{`֬YTWՠ:]ݝE"DQ7N Lhjf3XlXnNUe%grLnjiooȘ ;U47{>3wm CaaVB$0d}@ * HOttlx6R|`WYsRTEPY i `uHaLZ(,nSg=l6piXR70nԒyXE4͡q30G8<" (x<̝;sL%&26F<)Y~|$qRi-ǙV?>AnZZOa:<uzZif+AC=CĢ-g*O!c@U7XiE$=ñEEʪqXTfSOFv$Jq @FGG8Ab }v-\rcDch)-wIِwj_P@qq1eeTTSRRƦKI%  p8hjjՔ--'(,,Rgϟ$%ō5T<؈5(;[K` 1ZI S:Z<̴\*-ڗ^$sŗ64eeeDؼes r ud2a|s;6wEC{}65'EcQR$Cq\45α@pq z9 v+8,Σ,"1n9id#ۢ s:!fo 0%ɔNH슑9uI-t:jɛgݺWcS\\`phQ1oXGII eJ0/H~~9,K 6Ufcw8 (.*! p:Hkmvl6(D 4͡!ZZOP204<Σ8}6V䁝Gڲ?4=%z{7*+ .2-1.j !#h' r0Ok:XYU3~K) sQ£a.Yj&q4"1C+Sx9A0;vlĉzQTGA~!RXPDAa!Ey*6K2DZNnn3#OGQanFC B(Rv]H&ʊԖB,ή 2Lr]gs ;UU$dF>76E鹶@":uyggT Cehll" utj߯C(*}}}imo%XϮZ]?C:x?vi>n3+یpxxٳfnHή='I}r_Ȍģqvm2N=RRYQ+^a4#wu>jzG KGS_s,9Ϙpl#7De˜u322XxX*Kߐ$r;-=ƞ= BTTTۻථ ;w ERmHmqMZ;G:t2&?o:M;34L8[%ƲK]EZ($Hľw@ZtfE~=sp8 *%٬Q5cXh4ݏ];ƶmbӦL&~|> ,AX XuY^@5dDd9|\X݂"8p %*:=6ljic ːJQT$IDATyw(VVc:;q`Bغk F <63  \PÈlם5|! +ɤ14>  BT*KPU;w,˘:7|5YѤ[bsp`6att @L `t7p$M_upw\='<3g0fDϢǣ@!\ҠǀAaCU"9q_ڷqz2pю̵}RPp H[nEooTB,NBI*`t( }Oi4@M`X k^_dF@,y0._Xl-Lkbbzp0<%\x~ߐf FG J%O-" ,g*?;;JĝYX,׻Qe;Y|X݈٥TEI5q}Na.x"~0 ph Ur-8Ő #Y 08qٗ$4I + 2@Y`N ϢPy]YɄmA>GGt%w?tجVP(`><ٌёQA)P%B,9bo *Z)0gO1 c$XZb>-jf1^$eKs{ v|x?,5]b(k x)^Nbjz >.J\6TAr{ 2;Yʉzq z*xAmA|R{ϯ6;lVQ(0oEd2i2 yr]][]4}D fklv=0\*@&[otjZɔe)(}Dێw/!kdUEn$v (Y\p_(L.bhぢ -Pn :y[;6yX=cjZSb$ DlH78YQB!)8T휚 N<%@#bӋVkǂ|  GPrUDÄrDܔFCtXyur }0_X^Yɡ(=X% ^opN BŠLz&o%Ab!A¢ݮ-; cpxcOkU5a}-l6,,.7%nA0@:a~L0hνz;7Bhf7/ Zrճ;]2PtY6vaCt'Z~2keaT BP`zf;`0 !L /h6ՆǴ9ru²ժHZ0subjJ}daMetq^0LYU$0E0@&L&+o|uaL6rgrFƑ7i$**]ꦱR=EQ^')\`T+Jq]^U83 Xs~FI ֥=tE JYF-&NBA 9LMM!0@`vc8hDoov aH$poAVd&ۧU^Ø -߳=umc#+n*1#$10%jn2ۻTٯo} t0սR홳0˚yjL"##l$n\/TſRߚS^UGst9Ƣr8~?s?A-WQdl68ṄuKo 3`FJd%NwzbH kZ.'M_$?XM E-օ>o9b=+@AIp9غFu͚zO&FJg*!PdJQk+_˩|Y= qB0WB*5m.n-hC+unߜ q_ Ի`5mگ@+j 쩧166V+ 0(w$kߚ((:>KX2Tg7.}"pz'N<8z8~p\)j1@!`u\ s^1 7cyw1 K% 7?eX< vi< BUBرMS[mp" 4ӉMCYѨÒ aZ?R'kC u3s:KC(Fp~ bCre*J 7 uVT_hCݎB>'O+<~txR1otM7 tz>Z*e/[YRJc9Ȑ &XNZI)wO!,9|sPJaU"0p<o\c8d2 Q,pFBLŖnܿ *bI;z?l>~uB hPPL,%py0 毿^q!̇100| D3d+dUvW(tTϳi1kI/TE8䇳Hm9Y-Ϛ$Io˿)2M74 T45gLsR9r< <9\χn|0pXL&lwc*Gp1ߜ G&Ѕ{::ƞcYFU`b|wb°jp w`9E`1H Q[EpϬX! <-;}A7xt;"}UO∯> &(23Wcef& vۙLR.J?i $v^N.-}xIgÀUds1,Lm#ؼ} mftЦN$3XN3QFۦ8=VZ\S.ꨭ9aia}UC/QZ5I`f"rGJ><0=}D-s\H+56jjkwHm[ k/yKWáTj~YUeCAB4;ÃIzFoJLiyj }jdj363 gyv*UODDbqNG$(q*ل^/]ܨ1u&OS]gǎ;\RywpuWe ,k3$4'wӪJ&td熻vvaǎ;,C֪gUvg9  |{К/z\-`FyܱKQdHUʶr}ϲlXf{C{$@-`@VO!LuU8H H@+8{bSqkzu رcx|?XV .[>=rkO|?if(!7olJ JHؽ_0\p&d\ADZ8u(T=|싙L&Py=b W{?~3U'}uO}asxSMv6[R ~{Ey۶mwmaP~[o( -LsPT{M| [4(" /yu\>y}lKwƗyƍ(>TIYțe#J"pnxmloߩ h3LZ6n<6P}( d Oq\]۪*<IH[6IR? lܼ'OgAAQIJ,sYqg?PAHK>|0o`7>e+-6l\$/|Xs3 hI .w3C :ilP`"a<<<ף7GΞ=Koo/Ǐ̙3}myZ3x4 ,.p~u~R ak H ko>|tvv2>5Kkoa2 rga b M ͥf &ab&mzVVVCUUnZMڸ_ր˥n% ϱ4w̵ҲnL~4õlj'8z(=== 'G)SL,\s̗Bخ#C=}1m;wD~iTGCldE{y|1r -_8mYu~Hug%Sa e3+S>^\_ `uϱ} .9S`9@jndH&B'߰wM`T0i\b 6q s%)`T[,w(P[Z`RC@TruiCt]g%cKS`&%IENDB`revelation-revelation-0.5.5/data/icons/256x256/000077500000000000000000000000001423125252400210245ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/256x256/info.olasagasti.revelation.png000066400000000000000000001445101423125252400267670ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsIIEtEXtSoftwarewww.inkscape.org<tEXtAuthorJakub Steiner/!tEXtSourcehttp://jimmac.musichall.czif^XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDATxwm{swvp MTT[Ԩ!bL_7j4 QW,z:;;{huyH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!RH!#@ Gfݘ *BI) @dG:m-:I &@Z6;׬U c̘;994MReB*c b]RjߴbşTN8#>5S1nr x, V`˗/CS;)4!,3ݫ#Dwo|КC8H1'_p8NEBp*Pxt %/|^Jsݡ5qƴiKl6|)E<@vLr&''tܞ4\BZ(DG)5:}4BsC M47+RK1c8<:n_"r183l FBIYfv"@"ePFNd|z@Fg2r,5I[6[;ā}uld7ץ+WHL)p 1cƲIRk2hwL}YM)5'u*r1nTe~Hhkm# lTUA{)QE]s;|<؎NCqx6f[AMC,l{3V6 ?zڽ l_#g/+ 8jN:ie8춄2饣Yj ߄|&Af#c'3NAnUD+1&%fz=v xTUwowBs^z3nBwUvĈrTΝwtщ݁NaW?Ա$x\e_rTjZtlHӰ c'?I^,'Njb !wXf3/g {N)/;:~q/ڏL e**wIXCHBbSUBM-8]nTEQhmqُ7&/;w=GyOߏ+%hf:Z:x0!Z6|+绩, '#|]@׊iRc>ؾyWwRroXq{R.@71㖙=Qr5l@TB!BP-B4PH#&?5~; \|KΞOA~^[O!˾@^I%K)&eL=^Os{MvCIw08t6`+-[#/wgnۄU~~n@=O[%Y nTOb5v_ 7 Z n{aEiTϜާ{9R[~]*2ic !M"$R(tFev:z-dO+&m (#+_g̨I O>,o%Wވs x]*Hed8Nlw؁"Z w<ƾ\v,OrKŔ)cTكOnϞ5SR0}E} jLˤÌ?۾rYfp8"];H ;pnv5!N*q*I+gF>yyT7[F`vrdc'&ɰdi4f*(E7HH3^;fhnj_`IUJ).\5G@g3f,@¤ҥp iP*D~o^)NY\3RQ&/l] wNUTm m;hy!dyO%$upտ< Tfά6\3M*! ʬLvV1?\.'hij$;77MEE G~]Uu@tݺr'5ɓs;s_d|kC[Kk.W3__Y r5L~G9 2$Q*|o5EtU݉ wڍŏYHs(e-ZG8mL^~Og|Kn",~12v#?}Ɉ*faۣu5MW% YU}dOiYV'?45?~eW"i~O'((.㢫otPa\ C~ ʘ0~eہ@VGdC$gRѦͼ+봶1xr&'OGd<$ʼnJ(c ɐ#@r3,W\8Ψ6`dn\|^,8k{a3f, >fq>Ϧ?0aܘhڍ~ g˱91טHHM>[ŋpY8[~ ׻N<ާ{xuʫ#7i30z.EL*ԭq{Ma@/`0Kt+I?o6 enG%T᧑ؓ1w (..?\{I+%=Qw;.ʙW߳O@uSE ?>pruG=qZ8ΒnfaTAIl5ÝNQP^ze PTŗ_֖fΙG.ސ=r9ص{<>'~ض}#NˮKbxP4 =64)(v2MV7asD#uil$k⤺E^;l~x9_ٽ]UU|CcK;-흤eYP 3=L>?!!h %S֮33,xȉϻt:H)|?ahe%cnj}ii䪥ᩨc8l d8TǡQCUC9ɪ7W0rPݿb0n.r?" $Hg{gZ>޲AC9{e\zLR,"BE1e vfCLPo^1NLzLBNNiO_g nf c}Y֖^_.S4'  -vq!pӘ={7n3v!ES?Ye>eLfμy !“FCc#|6}k}ҁ|M>hiknTDXEqh'vQk+e>6T δ lv Bl#Owqӗ /bG:œ9Mg="CဟB ]?)~q%e/1~:c:zT>%i] [wǟz30˙7 I[!bxgOCa.Fg'hB;sLd{oJq~Yٴu55kuyI0kֲ &_smK8Y]ץ3Ͽ!q3lTO?ͶaS>E 3lx,&P,j+^}L;:hkkgo0r8e@zF&P"kp  v-6DO_)ͬy I (+%ԵxOvp˯`Y\s7(M=TYaޭ,'/bPUc KqS`SG lgh|v9'OdijJdBp^y55k>S!@u1R*+ KtY_J[cG>s.AƝWMI-ov Z ٸfhjn .|xN[r RE@wrP߱sGUZNY= )P]}s-% Q8v\}F[ZZygOi]IUsPqj9Akk_}쵌&ViʌO$Gw)1Du34gKtIRJiλJT[m߿3晉-,M1dH4osn#B1|d>:-@Df៯#_:c&O%2(b%^s ĝGv Cs>2C{aqc;nYF^ u^{}%O? @0I@[[9)<>}1uוI?1~B5_bYd|S(Ĥg#͑|$O >,i4`%AD P> _fnc"v&v ;JR =c.&pqwtP_@F^+ަb营`@Yw|K\~]N Dy)ӆK %w'vç̘zwŧQ=Y ?}T_2E% *N1tP666o~sfq6^bPbrt/&J~ab)U{2bR;BQB7%|܊93иsW1,' b`-~z CS%/#Vcny8m|\QA<3 +-Œn nl+泳25f1Y!ƗOoYpTfX6 dB-lɉSJ)/*AUm``_ 1?$݆lLQc GّbHibZLuLso~x[Wwe>NGn;ֆ?NƍͷVaOf\vE O-9BQa{I3gͬbGY1/M-q9y-B#A aN3^;6א&FmLN2Y 4rqk?b`n5fuSL'7# teX嵵wq2X8&g7 RTU}*D§,YD4Q aۜj'7UF.FȐIr'X~1d=֬8cM#0 "L!F"F1-}%\B7QG!u~>޹!4bA0998ʛ)/aHqxWÓO y:z.æ Kp wWFJIkk+]+c܄U `ȐIH)LB~I=%6vnXC (C!;o*%<dQ{Qd0H!bj.c"!-"DtYmvV:?=aPw[V fiWq9BQ2S3$4=,U#w1zWiPxs*ByeNjj?F n^$*>K0q|E#ǐrziTEGQ9vPkËHdǦwif"=384?֖؊矽7tG1{TG3m9fl!LˤӪ>#IkooYẋ)(:UU-W?T0g( O4d0e%4OG!Ip~az>|30xF`3$Y[ "jo~F>\=;jZVʓ]ҬwU43;kDm_ywxhZO(z$~GJ=#ٴi3NӴ__ ႈLF=C[˜wPJKķ!Ru2rH>kf[5!rF%%\wB4-i_/Nx@$oG^{&sLįcؐ!%ttto?\ś͆̾ЈHx߬)ڊDàEASG;wp)%d_xU֬YE&ݓ_їqUU8k*+ij[1!_^>u]M#;νm *ᇿyTт oƛ+59 Ne](mx{1_oݩGFߎ/k(]FEN-[wy{:~{/qv``VK.?;;}Cڟb' lbşBk{zu7 a&~!?ɵ'47443R_`J > .瓑AGYXzDScan$.įh+q=:-7{$ǎ_?ĬwwiVu{R܄|.b<b{?>zw3Y7BV Ϙ~9~ŖuB `<ēq:Aw_=+p2g"8BrrYU &kPI!wA,-Af4OE1Cax_0uX #> ZCM 04JSedq6G*z\{ͦ_m_m9] pemqBj=1|,Z4Ͳ~8NJR6r y/tp}?Ntj.HtCY-v4`ۀ]-tXh8Z|uϯZY%(Цπ'4RN?rCp89ltOS!rjl G'z;_>;`$ViK ʘ3R~4|{k>詓Oo򓵯iʋL(?.N80cY^︃VLa2Axk d9/@"i(e iQ&`fkd>vn'pp &23f,uN8 ?$_'ą号;?V(,.ڛl>$Dܿ0}%ΤU1:QXÕΡNZ}-kDKKe]t6vТFbHcL~d)I7N8ayg9 6rte'OɠC,s$D7Jx=#ИWF7&Q#2pџz>/VWA 3vcQ E83gx쿕~b媷~MRλ(!`qFգt$VeK}v0eC89C]lEGQ[]{]6xp oiMǟ>EٖuNlٺmwuvmAkk+\~ aGĬ98/>D?:o 38qzMM|f9wy#MGg7L6_effQ<69+WvB_¬̚5߉?W'#ACT9sNc! (MV{|<AEϬoNlP,ׁRZx|&6~{kPUA\霵0&/5ZsquѺ]wFޢLJ1T^mE=~ ̜yC݀)#|AWO  k ŝ?ˇ&jv7x9 㦟1!&U'iޏ&_eqU lPWa(w+SƛW]vtfTc`yB\XK ߓ6p&MOmf3!!ĈUG6)K# /{ihhKb&~ɾ?,4~KJs|'߲u~)&L_)2ҴrwG:0՛=c ydɷvٛ1|jxik_\yk:Gw0w6_OsGwz^xV_í 53ڟЙ#>ȕ_\JJqkTt“ [@[(G`޲=!=;; '& /TWǝu&7ne#Gc?=-GwO}m?ѿ`56Y [?'86o/ڵC֯zV_=ㅗ_OE]f8K.\LSӞtM\r!PJEwb'@0[+WggÆ yp^rO8o\rudf%NHb7]?&#& Ͽ*^/'Ϣoz/:::oh/|g Mgi^xf!5ku~qePZ’rI8}cso枲(g1fۅ!/aS4t Ytt(ZvRJ޾~F<&LLk挩Avu/ o% ]вౖuz{ sO[LIy}zEGh<~i2v8ae MWC}y&Lpaꉔ{C+rpD彵Hd`s6ɛZRXN>-a⒰1_zZ`8D5:iln粥oA{@jjGGfNAB j!αCGG ;̅47',.9}:nF@Msig1xt%P>#B5MۼBe@3Ø~ݼn Z: D1mAd-H)yɧ2HdtɃ횆 .ݍRӐiEL0+g+5q㱓뱓(0e0rBjF:|L J:PTʑ{5v:pfR}&Ryyuw~nhC[ǞH#31|>`:sg?VPP1ZJt:/CΊO8~Ya#6A3ca&dw+2"Fo7XQ}=|6j2gϟNǎM[v<7"k5Z$Mt(F:y:Ȭ|q+?&{w;::HO7 eYYEp\B(SO|LGo[/)g^`$[y'Hԣ+GiNTDXG҉kb7>ŅwDW!Zho4x), bDלSnT ̾ V N_t2^yga)8 `eIƴq*ΣOloa|8+Ò?6Sʈ}8VW0Y#,NLX,yiͯXƬaH>9o4P|&xڤ"Ft6ۚ6$Z[9sYס| i013G?/p=,O~I$a@pI0m5!C4eة,?F&+tIƞfg3I'%h~Fan;å28ge@`} g\5wu;6.  e'dTY3UU5?n72S N6f$w'?WV0~j5\s +b3z7APF^cD{`cb>qDoŻ cJ=]XnV|FiAsZnjrjD>5[} !5Iy~Τ;bzc/CYy{c 2duc#1ef:0 BL6ꘫ{򫯳KXpTE 0nt61Jѳ@+qtj{ر!ľo_ǴcJ=ػ1iZ:x;hJ$;+\:x";%y ${w'[[2n(::3={{|2P(4+>mVE؈'=g- oQWb8i^fVcApMQР)B°8T/ `wB4 )%5|nޚN0zCQ (rp%C\IIIiRP9O&7Uz ++\gT B{ !6}Ti /0n,Fcq'JCC#̈dZ'z oP[Duiu҆8& $ڃɐ{.Yk׾CcSco:MӨ7z}kީ#--'(Tp8 @f+*J$о`ǟ{o-3]ʡ?Od{ͯQaMx2R}o{ġZmm.Vdkw311GZ}L .qR@Jɺc箝}.P__<<Ő!C7w>ӧUix,_kofwrs,'MϊזT'1E9i }1eH6ǐѓPNF}\KAA>wزDzF#~+u_"c^H==\ Iެ.uxQo0 vlJEuNUU#---SIKk+ʹiɇ ۷ocm胤}` :r222PUԞX;LMm-;wngxބkjrof\v唕uo D|?@N=hR;ZFpҋ 2@Q8`Ew;3 :>;:w 1W+Dp(6fM{[ACC#EC cf;67!*$6U "?d5+gDPiPMFUX(aG5dLz *hݻ0>_"al6`ԩ(jaH餴RNgǎv |9n~.8B_NK)dO:?>/1ֲ~4&ytطo!N_0|>fCEQRogf}}w #F ''7ľtȮ yu*UòwՎh5K3ɷaI(LfֈL> B!)x.[ywФJcE1b={h#r48f3huO8hWdP_1jTY7Ƕ=8RG3q5i(SW HZ \Ü%y #y8|,Oε\i(j457uCA"lU%fi2@4M4s}31\C_Bb}xD{"!ϱ֙D ۳[̞5>w1͆UU~;wv ` NuW"L"%("Fsab JDkS"@ρ[T;…rꩧ7:Ƨ]rbZ[{T7YQ?,WF4ҳOG{C->Bի79eIBUSJz>u霜 23ɊG{o YED_M]Z%HkfbtF`bDndz;I(#8kJ#W{`Z$)o0۳C>\wQA8_UT%5KKs3>(=y.g}?!:kЕ`$E`g8y[ ̯ϵsqٕhڸy٥<<^)dB`ؽ6OYїK Xf |,]0xbԤHD4q‘wW?A[R@UM$b>=Ap+;|ŠbPaLX" Q*@_|w˕2?wq07:w;a`q[OgDXr_h[VHghin`kֳ 4@UAZWce5 Of\4fH*"'}=|[ty!>go[pg '+|jT/fM翏7WV !nZޅ>}ݗY|\ %^{I;kG{BWi:ܲA~{v!"Y'ݑf Qڽ}$BmB 1݀bER1 ZU&T;lN'Pw@nZFGt UKDuάc8KuIoʠ\UȖwN늭# tJ&h$j9m-RL6M:=~" @ Pè~)5{24PX,N RH֭]ϊ~Np0==UEJ9ΤQ5BDS$C@FO}E(@Knπ%-Y֛:um\q-EdUQ'(\;²v%៾]OCs k 6j?/mo.7 AŐ({gYSFv@0ٿ#1M5Sn89g /E`)>"'>g)]~ x;37dc@h4F"jT  Cz~D6~rL<\Mf]9fM]o}U%K3zl"l҆VƉ*U2%8^NwK|ů#k6[X9m]#B%k %T +'$ZAKr˨H=G`[Ep ֕ 5ܺ9Za~8gnm_aԋ$RSKE,K\LEQ,JwҐ]`#7o; De$HEt]'OP(>o`3]qŦZZ -PUٜN4l(w#B 1>ns ɖVϠcGco3C3^1Ax+tfxi3>@*ft~ %3rC|CRnePUQRRJS)erg̤ɦ̧4e=?st_q.D#Y|--ݽ@155zw'6I161m%ЂU۸ƛ\_׳#j~%vݐo(<]Yq.׺zD&D)$ݿ^D%l'thR f3%ښ^BQhiw;HCW_[c~iaK+TA(ʹc ^~ҩ[ 5o vю̈́E ,RςsΛRR-IO2=atz[g; ~FCzh|oV^C "H$JKKssV_Z~]iw˲U^!dILsiAMX=>As=;gXSuʞtS̚M~;og횵077&O)m@u ;bSޒ˘j8x(: B v+zR:cw K 媤\M4ܟ0f̺֠?飩."7Z72J`T@V fTF)+NeQ4*4\G%gK>cpj֟8C1CבU##|_MaS?SVf iMou8 ݞlUPTTT*ЙO :,]cqَkK.Gjr8 ?CP{Ka@׫A?7'$ mo8;FQ r3C#TKy6 gώhif`I8h3K!f&&!0zK ,ck^ nC3T' Hvpj29Obc!~ en\>Ut gyYfz̳(# v8=XߦdRiLΰ.~&IR\*Q*T$|ѱ*MD%B2.'FJ6'f"kѓ0 kĥ0QP^m~T J@C HaD"xR◿|ZA MjN80V%>Y;U=kA8h.TҖ3Mq$ZO#:ؤ2 [jfP'O+ܙ'0*y*,jC tj+ (Z*ZB4ZA]@-Kޘ /<5M>W<^[~Kr?}O  Mn"$IMwR|@T0' ic %yT`BȾ4,/MYi*HE[H4J2IRuH !( kFB=8bLs4 NrTouu8p4J$G'6%=ue7liFB-*'Zmd;rY.ČW{So#c:q/~~9F~.ѫߨJ,Ҧ+1S$X>c#o*"ٷiW'+ٷwWm1Ƣ1r,"pD\ҐdYrLKa-ZW0w! b  dXߺHUf:R7̱ok$YvJ\}[~ƠZhdy)@JA/?͗tqo_t(/x]{둮(b|>)Y/gʜTYU< ~:1Bp~i2gGf1*Y -鲺:2G/1Ml\yYgy5qG<n9bʧ\KN>ªb.-EQBǠb \%f 9zs{gy;asi0  e(_ Qڲgy K6l`&wh Uٺ f3W,YGG-XYc-`x.SFxwqɈHx /2؂ND)_B]CN%bCAf/;54udHCiAw ;p*9+p6M>o.fJ "92sssplAu5,6@ jb!|Hs8^sGp[h !ժƦ묨Q/K坿IW_^Q|4ܼfjn]#SL5 h/ ~ b :*sϘ$?] +;U YMC*MHi֫{˝vuuG` a$O!Jglp'cǞZ-Եwp87.rs_Q.ZBvaPV(ށ^[:s;RxrF#õ !%+% AF_GDmŨhZM Q Cޡ!\ sR =윉Z@qK%M4u[9V5#c,xm$uCwKצ|#0\3֨$]ntq+&حw#FÜkOiα2=돎U_UȀҙ?w#ޏ|JE%AKYWt{/!-qb5mv:_׫NPMۼnyx}zjPRT|&ޔbV]ΉЭ ߁7{l詹_n;JQTLS%e{q͖㥥X+LglΡv-A@ ҜvZ[[袵L-w IDAT^ϔN"6%m g?Ы4믿ɚc.bLu$Ts&?SY–5d]^U>&Ia%[/$b=;$4kv*ulBD  Jye"aM$Ahh4F}t~䣬ZRGf3 e ðpRIP(lMxn{~93.n_ Bs9ӁA_i~t-PdSD`8}!~,_և(\*4d6[a2]b2]feg} 7\{ Xŵ~ ң.(3%]+{ AV~FOlf$p3 YBposd]Ewut4tE37~e4exg>U3FO^5FD: imi lNbjjM]P3OE&[ݽ˶mdeJ+Ρ9kaH";pin&X"MhA$W{]~Ǘ|],hm+DGsZ/K5|odoC ]ECZ`0H0  ɓ=Ҩ"E VnDK;gK9YlM_Wv 79Z*ˇ] E4M3S3yLmVV{ 0|'/6S~aŊ~޲tfޚãn{CI «J@ DB0ag淾aÞ=/~,4U]$`r]ݾ۶m]&An ܹ!ۿ~CM-hl)y;voAAHW`<"V*:ld2fuұ;*ෳ3! #z75U={Z_-|=G֢GCy՗ߊ*HCGUUпn#/388{D"~__{ԽkoO/`jssi1 o[R* )%: %|>p]33;юdž|b\ͺGAf "NB 5/|o}> ~@@uG|.O>撍v:N>3<锟9sXy7 EHva} $TCԥ|{L6[WP[_optIK[-ϑHDM6g=?V@s_Ycbйr7/A(h p՛9uP_wDR!;Xq ESz5D#QGpbA{{;X-!{8sU d-.K^ʿ?g..!xffT ZkOWa0! Ix{CY-U/zo} rAxZM\e]fp8U湽HNٶիL7Ν;ygoAZm)yg?iO o聋"<f9[|;~C֟[6%Sv/%ERr EzݷӯuY;^٪-7P iMrt߳i^Eu~be %\ @qe~駟rP͏eKȇ?ʕLyhinᓟ7];@6a~~֑ͽ;FWYOHe6aշm6n˅\xK|SQ nc=S]@>_jmDUUUǞ~\/9scǎaK y晝gBQYbM2~&ʲ" 4*{/T[pj k/%4Ń k ԋv5 3lӛ'( [A`$pm(_.]Ғ⮻!|/i%MxUBٹY*oz}KҲt#H((YZ{o$3i*eS'T*έFuH3Sek1%~dk{ϝ荆_9۬)_=*i(&{qíF\A=-a0;7& I λ3@U077<̡2gBɄ9] {3gLso|X"3diLovQksZDLP;:HΗJ%]{PU386s."{>ַ2ȗ"Mt \F vlq_\*ep۷nQʽ Ֆ;cAF$E8y3Uuk mp ~ъ?ukۈ.J:E'>AEUBPJ~Z˛\G/!.gy<9c֒Jچ!b<W@ ˯f[go 0~9'ӣukB+pQ lԼ氋мH֋H$]o_hCRΑs֬YO:3q G* -tњg9;:L{GwHHJɗ%FGmfx۳h8*jQ D a:"h0Kc'An߽/\߃mv8.b/6%,B|Xf!qBE%pv =⯫%(Q;/w\5Jil^Ưm pd&O^v&žH>RZ--~udЬ1>ATdtl)>wP._&&}VURVk"ul>?ŊjmeUJZS568z/a2زeHY_K)ٳ'Nfe$I h[!%S iZ|!ۿ^YIqQ`PP%tz=r7Fz?'L[b0׬iCvqٲ!_K/hb%N6P8lM~.FB1~6sG hJGWT"^=U4%oD G+_/5)#zeLJhczͺzYՖ 0 &A sz Ó,[ejzR 0ލnn (@Q\%t Cf$\d"a0CӦ@"d&8hmt9J;v8PV~nz/޼n5FJJ RRQF ؔlBJЂ"aFッ#Ns7ѣB~ǩd FhguC: BY>_#\t=<9 4r2lE!!|Z$wH 2A( Xq095cm[[SOfœ]rO8u^92[6oq&ɤ"=~ lj HGmCJWx8{?1VgtBDFܥf8pqY(br x.jʞ=/y|Z509 {SfAG=n:ϨQ"|n@ 6{Z<>R |щ ]~Ԗ%ӇXŁƺ' طdRgNz(L=-x'}8Bf\;K6r=w(sss|/K>p `7"DQ"(P`P5񼣹u/ȟo5McúKhm5b _o'Eh][Gv?7`'H 88WZgPhtB_dstt4 50/K;:=wַgF+Y_ K~sP"wfC$V"o `۶mNxLOOL6Q*\*{L>V|rz=|Çjjq;XSsZC fggط? 4-D,!ad`jzg}VZV߇K@oGWrEf&=ooԟJ2y_[aŎ"&B2ŪWWT[9mB:cN)xכD%0iJ P+_+R,䱽\>.%4;+> p 18x`0Ȧ..cŲ$||b%RqbbNw?~…l6G+=xQ+,voD&gZg#?u,+zTRMQU*v7lWs\G]=Omoe,LTbu](H\{k v>s}.1+cNumfKE3;]A~ =?K\!Ra X=rPNRa .ݭm,]D5?АsjlVߊ5d&A( Bq&ǝ[w`h p:sxVƌ*]}sl8;u^&yfvcJO陬+=dM] WP(yzk\wu/ggg)昲gkp%Id\wh GT%KihsTeWpR akA*aP)Wh fժUlܰªH&ȤhF$ 7r)< KG>3.w395c?ʻn!E!b;ßwU&R29:C̫78iuϳOWӅ`&o_+xo;4ODY"Bss/Q IDATL: X4A2vNPhkk'Oæ)/9##0$ߔMtuw|rVfװ+iK{i!04ӟ<9d,/G"|#t`br_nU+٫QųHVŪi|\zx ퟫ !^[~ 3ncv&E|:q01Wdב\DbW\EP5~sƍO=^0Z=f1Ʋ=ϫ4=sTGي/%|^oA t*v?۫" t׷y oz &j#P*dUS‡0!2-M?q-,@$I}iyr/喢 L@ϵB<͋D#tsbh׮CΤYv-z I65ӔLiЭ džO?&xd2I,'4ÒGFp8LR\Xy@SSD-"%12>1^G^ 7053s{M  [wG+z۬6[08=x?9}o<~fkn.m*9l@Z{݀r`MBl-p/!g"dժU@ @>[;>NSyd0$KJL<#PA`D4BpD`L6?rJ\Bn-]T7`X7;v>͓OmgzzIJss=zG~{!Ͱf` 3PI,0yl$HUQ)WMN!Q,W(DHpL$Fcx*X~!"0 E mlh6oX?_~ \[[gA|{;ro<;̦5f$ז#R:7obUXxGC?q~B!'R)mbbѳT M)Mh:ȑ#gaK47@KCH[[Yv=mm3 s;KEfggbrr fgg)ϟ{xdtzkיoDe5PbDҔlT,L$n0:z2=FQ Y&B'gjja/׿O:&Uk @lMO4RR.vN|т7r%K* !ATe`C͘%ƣ-~;2UIpK\ڕͺFX[V,w<ॗLs(ի>(b&0tݏ[WdSիWՉP(U}FFFȤXcqцfd42{="BQ(KMMJ%r9bpdd&"5`E [!JB ]I#gFp Z8\aAZ\ّ'|~ǎ -'|>`\'t{{ܞcS<9hYN p5B@~OspyfBe թ* /0>&B}.ܦnNݹY'dV鼸O#T`-3W330;3C6en~. ͩR%N8p`}i!6][v+Xyq[@@wuTUa5M0a:J\FR\yU%Ļăm#ѽ:R'KK)$γ~LT^{[\sgnՖ+[?{Lѽzpdsl_Sw^NS2a]snX:<<}/i!oq%zA6effL&mcOͽPW)S/ L6N)(B,) 4DL ˓O>#TAgⱸWcG2:>aaPUn%T C\*+4&--)ش9xq"82a-M[Tmaq4]o0䇞}Up-'0-]F[{^L/>{5t me[@q_ҟh4J(e}ikk#j%*RJyf?mE9coﻃ%9~=3{or2A$;HID*dYU*%T%e].*Iv.eJ$" E e\{9ywv_;UNOwL~_ XUA?z&|NshMrboԔ(GCc&2́|>ѱq|_`~)־l~L\~PqTeObq95R3w5?:}KH8,ھ}C m;벣XWf$9.]v)'nzoZn?SRsp F`FvqrÈuL3ҔvEcr,j mD$T.!^9+K6ȸA<$ /{;ItA(B&E*Rzx8hh-L"֑ 9q`2uE٬w xO(R;3siX _ NO_HttY,BM!di$I A8h0ŁA #V8,<"Rew{H$(p-ėR0 ۚ(MZ_ n@BtsK"Ҩdj`хۓq0}k./PL'UpMJFjy`3~;ssp6A).\, 8ioӌSt% aexǕ+'RXLyaXJ aA t́Mp(+9.8F8A"G"zh D1a2,@ZfH^ | oaLb+L7/(_Ng51nԌ mf9ui("5$;,v i ky+2P@:O!~JmVlp{t [XR jw΁P.w1<4v|>h2 A.3HeB4Z`!譇RLMM?| ǏYT\"Pd|`XpÂa@ #5;iIAcyLG'j@v\.d`@j8tA([b``#Hk4S!{ŊR EnnLbo^_67ݹsHVV O`?cfg/Ob! RsӋغk<N%D M T({hp-}%"L/7x MDǹQvw)(N>b~0Ґj㐖k:#c^v@'y_/ҝBaD3bsЂ_ߊ@鸑_8Ui^K0 .H`tla CDA |0ژ2\L-nTS*HdүΝ0%ހ"N%$/oSSJ)38~{ (ͭJ-%ĂWOl+Jq7rk/rޟkhfQTD.8PP*6dp,ZP>X\iQp)Q0X`1melÁ0@0A۽mکg2)LNNi bOCwr#G^ dv_iRts9t{csdt3m/41;{?Cu6*| 4ťRSŦv0qmϭ0!h z0<@I6 hpnFrҦ@\W7EкaF5Nűfm`):D<lvROfR2ϣX*)$q645. !( 8v-yi 3 \DuaAFTYN<|N!j4FOtBGN:'xcpQg z*ZZZҪh0D4u$Wa&Tdz$P.f,h8f^Ʌ ;SỲ{MFנ L  i^/`nf;6)y6\6ͥ5䅝5//]KZ?J?7~8{ 6x#yPB5j6 Q ,;ӷ $2ٴƋDEJ:NJ }  EE@+,a9H(# J7(KUPM`||_;coF굫hnnAkk ˠTr ` cY6 H |& /gnY'ۇ0Oh-ob:OoU8(âTz ^(h`ӒtLoOW ;f/_Ns]{?}{>t (wgnÕ'`SP Eq<#`XF!_P!͆P0$#A'J8$}JI&ܼWxm{F?6/F3Xh)aڵ#hinQli)I#Y>e+  k<0|),&sx充zfy(6k<^sRWF@C6[w?çpڰQB2E+;ZDqo}]; a/^uN۠GH: #l'QH @yAp}Y_%b[_lK'7*ŕm7DQXC[wŎv)Z wN+wM{ޮVTïafvV`vx^|K_DkKX :0E:߇^;6~+ Z_60?vkF?d;kH! yK X4.,E`ãTxܽ) >R7u@5HBtP,Ls DCy' 5KEQ(qq{,"% _V05Q`fB K:Me9DliE80a&n+jm0+mՈA/Y̱ @tF|&lzhC_7CzZXL5? hP(S4pP{0Ŀr-LGkQm'Q46@eh+o ֮XENP.TPA!'J8m) S4a>;7ѪIXK^&F H ;jHcYl0˱޾33SG4$@aiih2h98M`qn [L}R2ɼU.f鲞Z X/"жޠ:\649B=k%փ \~ MhkHArE)2@8 y0h 5@4qŒ.S9NaiiQQ?c0g.-gfS C H %*9 a&rlw8?^`+KV]zkn 6l6Vc.&; BS vxQ(YT `kSFk5(W_ǥwȳ ,gY)j\@hk0ׯMMJ\ HӊcN)M`c&pHzPxV)AlsWxM}k'\.2,@ǁlGMFGQl6̓e<.1+]𪉀Y>˚ܯY)lrxnᕗ^ET˓jlhƣae8ͭh1Θ<~M[TV\WHC`+@'EQ_d}Y\A@",&"#  ^:7{eRq 1kH_JtHg$nܸI)q)FRaq{q{5M *J8r5ΉQr⋿%47tz:«E>  .^|B 1_+%7hc{weTt5/,!طGx:B]0] vXY4'ٻCعcj#T@x8H%T5tP#@$[:k$ .gaq^Ѷd9|5Je#Q}q*02kw^i AUD8908u\|+1"ϲR/Wx^.k;wn;~O'aw!#}A>p7^8dPVkX`q8|!xjWIBG TX! x<ݻෞuR)}noF}r` 6yo+}}OZZ!n ˢ!Єb!L6GO^F  wVQ%ZV*]g9yX m/H65֍p9l+8`rɼ"!A,"T!`9<4Q +'Oavvo/kݾ^ſbiJ|=0ryܾ|-&RϦ;&9=;=N8vvaSO6VkPbvr #p8Uft,`lllvؤS?T 6ΆSL鯾W=ŭpU$XK8rs@ r-E^Q,'yk'<R ą%FE'Iybq|GAM8Ld0/ݡ[=DHp_nY|;}KZV(%WG1ֿJ6bZAED`i4 &"}ⵄ[KЫ!% `*A k`yC`}h j}l.bzl޺,.8vvtU\~9ˈ016Xexr/\բ׳B|1ssWs}iB_jHtp}x n78:{N 1B}4EtIH'X$Xw(j)Ġv( Olp4MSr]5ϫK2|>i-N> `囕R'h s 94ӒSݞSבTʉ ;?~z{,멘6&&ᣇV,JY uUד3Y/qfX@|1f1i"al|vN;}m ql2偮fjESCUw؅`0(#ffi21/e`Cji4qO|CO{;)y,̌/‰kX:PH ݾ}o_d2==];j%Ji/Rq4_ɤg&'oе|5=Rf|J{=ipuq… FwG~a8s@.]cC6[ D<lTVvYlmƖf,04BJk-FSVjqHTAӰ# ٨@-#-oOO8W>!M~tFKoJSt@8Ý_JP痖r7#6.X. r+sb)Z(Tv&M/ţ^4(׀+֥Ps-@v,UVƎrc|`}+1lхڝj/K$E$Ecz1fe2M$PSFŰ1 Ɠub\-@0QEߍHs"86USl]L{cWbW9tz6 3hg!4VQCZcZ^bX30Wr]Er+?~}qc@Npilyx+:zۤ$XU6Aw8pb L-$1̀W\uQNU H*88vYr*Fc=rJ45x;g7 3K>iQŗ^t>/WSm}ik&j2ZFeNM>5u{{e7櫔yazo&/M[acވF<|<HfUkh"!^?q੧٥\RhJ" ڿ4i⵼nBM4le6lx/`zl7&N-F> > 5{!g!DSka?{A-/>Ǘ˘\Ќ2lw9 ə%=xCZ_rZ}9tz.zOzaTb]Z޵h@ND:[466N2/֩5{pظq#( E\B6V F @VRۋ` | XaflS (x"Bd/:HL,`}k"h "W܆V{%ӋW7jWa.X.1c9tw -m!V C6/}RELmp^P,+ z=<+RsqN.`~bQ\_LfޙxX*55r5Z}௦Y/Bx=&@Z(]v?w8|vv>'Y޸Me\0 A0B'pg ˞wKfF.b{Hߊj$phb,F0Bld\Fxǎ:'3]^+X-+r+V5 ZL޹slk۵-4HXbaz # " !ڈP==.Jj Q܄_IVx4bbI%EJsht[$RrfCXW`9uX ~ַ8V‚P&'߹89e}@Y֡.Ʒ Ě`ft0@ȏ@F/n0CA߷_\E2($@Y+@#J ڝ"2K" ]k狉drݩHj\}Búz9O%?5kMN/ݼ+n 6xZv䕨Ep2 \.7(I@\ÄD?{Cr5].l&s62 aC2sR\6 @b5JbVh|Vq@@-D`Z%{.Q=_ֿD=.RBf&MGWWO?򇜍ӹ5޽k>; #KxAkI6`jzA_> >ﱯ ߹}~g"A`:_:! t[#+y?,r.Jq_^)krde@:B6M׽s.h 7kZ a3Sk~JQ,ij~PWƂIBT*h0P ךwA%YDV_~j?L ʥ_fʰ7[j=6m| @*h*j-i466fb?!T\{A TJ U\-D,. E[Z_ J寥֯&O>I<' |!JB(MeՂVBXKۀ@ɯhE r*-$Z|گ<4xW0==ܳp86@N b_ BzҐ@ꖵZNܳcƴp8 a]5$%nə3gR*\@< T~5/ј^ ='k<@y <@]G IENDB`revelation-revelation-0.5.5/data/icons/32x32/000077500000000000000000000000001423125252400206445ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/32x32/info.olasagasti.revelation.png000066400000000000000000000047101423125252400266040ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME;fcn HIDATXkl3}?c;oHRBJ~G CB{*hV*EBD@@B$vrⷽǮ{D$~땎F3w=MlG3C=:C\bBDÆ"|`_x}u-m-$.%`YSyb`d(Uj]4324a1YOSu6o~6޾8iPΫ/E3p;<?8ɱ]|ǎA6oɍӱw-|EQYE5DI|w)ބ eU%",P2? ̖>}j>r~t{<ЇG0LMAp18ٹX8.%K) PYx͉gGw|^U `Ӧ[}l;a 7GLu%@7/"bNR,35[z-:6, }u8j~)w|9NZQDeGbr*K8G$,۾hL`fZSL`YcY&W;۶tsX4$H g"fNszK1,ôp=5ĉG#xlFuTU% BtOiaS/msnbۀC#SrD*(HTomkWxώ'fnG>Ӳ1MˆsC%b wb*}mPmHn+WD/c׮]K3,|%` _3 ô-Dlv䧺24"aWt(en\zϹ@7x9 M^K{}9>+VSVuʚm_iY(Ȫƙ( L`d B72c)^ӃDizUg;6OLCe ``Ő[Al~[BtL6K9RBrDY܎bd펧b;64H*k-k&vZwH~BUֻ M*5[1LUUFHD0 YGYҘ`%X<@2Y{ 2V6681N2%dѬ̂V3} _+o#+wzY)b.<> M';;G(p 8D$p8Wfˢ`cBϊ4r_y3c)f9NbLYd7t< }GD"EDA$ R*꤭ÇI$hil( |x YuYPVu,I6xn1`a-P* -Ȫ @(eppmD:蠆16KK<طGx^;`\dr\}UUW." ]x$V7WPurH$tq832<5PUޓɏMM7Ssi(9Ǐ#^ʊ [(:m GNKZ[2}OƦ&&&Ƒe|Ш ILOΏKUpd Y۲idY]N 4MLQ!p$ZZZ4UAUeP\~.3ۑ;2yhqlv;?:/6i\b60B@y!74603AE.c݇^#6unkj,]4MCG/3T[\m(g60chT\9A}xX.@w_{>6YXXP(uv=m\*RXJ a<4/ur׷Zp?>ya~W(ʡ#'c@ 6`fU;SS Nʁ)h008B/Y˗-9H W Rf|>WUDܧs:hfY䳱M YG`I2Òь=OM7^*PuSQ D\@Ͳ;~i8KI8wng`hޓ8:>RO7</*ׅ/*Ld ^ObwUkU˾n\ZdZ[D ٜwogov\TF 0Y U+3==~? pN9sU*JQZe٧pI;'SGFFGGה@?U fq¯7 eSr/SqڿUx".uIENDB`revelation-revelation-0.5.5/data/icons/48x48/000077500000000000000000000000001423125252400206625ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/48x48/gnome-mime-application-x-revelation.png000066400000000000000000000070071423125252400303420ustar00rootroot00000000000000PNG  IHDR04̓bKGD pHYs  tIME7q& IDATx՚{PTw?4ot@SPFG1&bP^jM2 +VtL2nLh8+j kƘuy nI=U>{ă7n/F o)~ 555"''i8(4)gϞBaX& ɲ|_fn"Μ94'C!Bg۹y&FK@0ʗf),,D jLJGQܹ_d@eF#'O?#00Ч Bpp8۷{I!}0/cj… ĉXV&LoNU{Ch(#G۫NFh""IOx N|o0= !eAjj*aaa466Eccuuu|g΍`C􈼼<'_.$Ivoل$I#$G&VZl6sJ!{9Kv qiAV^J!8s J(LOKV0{|[-hfv; BRpMdd$[l?<===8 N-fKA-$|ƀV̚5 6PQyE_~eQ(444؈NCeQ(,\F`` m珿 yD9BO<1ו )oaͫٵkϧISZY@A.^Fhkk#((}0l(P(PTL&#QQQ!X`!C̝+r\@ii p8P4+)MGu)2 ZMPP.NLRSSYj%V=cKJJHKKBNygm۶o;Nq8<A`` UUULdj8}4O>_5.]ٴio6$޽{G׻XHV܌Zw}E5g,[fl6 s_BJ|ڈ`̘(z ǎ###cp*%7ЦM ìY;w2w\/_Nrr2cƌݻ477sI***Xp!ii7X~,(J4 11j$IBQt SO=$xVC||/0sL8eHLL|駨T*HLL$33[2{l"""GTI tnTώ477 ONb޼yW03ʢŽ;dڵXVZ[[$ 裏xWxI$&NGѺON=Bff@h`R)INIOO^cŊTUUGGGFAOhh=FŹbΝ`0xoxC%2ʲ %%M!2,\ZfƌDv=|Ʋn:rssٸq#K,/`}8իWSVv.7 W$E466 WJO]ͅ4!3fB+,,yf[f3>UUUQ\\Lvv6UU瑤78^EGȜ)- t:.]Jvv6!!!bR"00`~!OrJmF[[FӧOt3u{MbJw?tvZ\ABV+bĸֹGTӍb̛۷X,z=\># Z-W eWCCCٳg>,$ sWT1i$k:(z-֮}7nbI~آ?=< S ر^w݋8!wg* [l!''݆Bol&:z Ǹ)x$6 7\ $$+g$$Lan#!`3nxZ%?d=2%,\btuu~}>+Wfh|Y2vl4aa.T*t:j[Xx%K~5t&<*їzKcc#Vjy| /#8R6s&?6ws~ Affw<2:73 6W%o526&?;ns u78Yܼa2#ńGx.ݔ/'#hzue-JZ5"KZO(7w~bClj`w)(V U.Tos.9B`&22]]] ~ >7gkW7*۾iuz; t*ܧ tv[B{e d &%]IENDB`revelation-revelation-0.5.5/data/icons/48x48/info.olasagasti.revelation.png000066400000000000000000000200341423125252400266170ustar00rootroot00000000000000PNG  IHDR00%bKGDC pHYsHHFk>'IDATx{ix[yK%[<۱ v3a- I mДҒm@ -%b !@yr'd˒%KY[[UpNϽGّk^ɿ_/ l懌X&r ;misr̉xvr2\p5az0ӘiGF8z'&ަ6/ctG6/ 6|҅˗ ˍeML"Gzjrb J "\7e=3qX"3}#~*ZkXG#w__e6Gf y?D_0{yO] ,i/--=`qi)  \.t:GG;rL"paJQV~9HMN~hQG|'2Xs'yJNJNvZSs:՜9??ߝ.LFV tw[CC@ F?D"w>!@3&MP(8_SV AH0aOОQ[5X_ %Q婋h}>w<.uU.whx}la`ab@\ v:{zڪ?gx(*i Fc1za`h QJL8`?%3B>{,pkڵӾ;/#`G3?z2c͚kO>깿rF$z}>``pXv`)SmhJ!7JX JMU*x<ǁ3g^ JuL 55-d"i e5!"X hbza&^/Ngl xޗ_[vlݚ?=ʼn]?klI~w|ɗn͌"v@ccsv4PVVQq5@W8.MBN' 1(~e k499@i_df  0<{ SRx<`ڴTĉSӧ[ZӧۭV]/<d-hJ|ҥK.]}[3f/s?FP{ǎcc\V edde2K?j2H$bh$44;oPQART,'B KM3 CBh=H"I\(zm󳲀ҼDN("I_( ?nXl۴:{Gq ֜9 ^Wמz'._,i*pjҲF.񀬬HO끖gF\b|@&S^ᐟ0f. hZsZ[;;hax<`ܪ@,DiR}LS{~Mnw' mԔՔ=3%E=Ksѽr9x@.MOjjJJZp.hLOOKZ8!lKh= 9paǣ(4)7h NL))4ZJ< d!4wnJlЧ8̷&@Q,,rϝkn&dw7R%'k0]TtF)DH}jO8 <) /դnv`S$D*$z3gΜ5 (++,4 ]}}VkeV9C:I22Ԕ? dflrAA&W{lN7xNE"N3ùرc׮`Pt3@(h4xX>r\$b 6ِB< #4ɹa^@$i{H 0iXbH,ZZZ[7|_V\⡇ww@_7P]}a9v۷>r+W.\X\ (ے(jx1^6Pv_S>\IgoLTPˍIBӀX,k4HGIa`$JVG/pvȁVkoPs̙sur9߃ARx5<<4uu62 L&ju:}>`x̴`0닋+,jnT0.]4UZjժUVIWxq?R*#O40 64?#| Jyy6gt<4㱄3 MbP|>ca\c9@rL b@zzIɍ7\.n0D([9P8 >4d}mۖ-yq 3S"ŀ'뇆HrvȤTs^*-ڔPvUfk<ц^z7>e똚%5KYG\UL.7T*022ӁN5$61YRrzbـI_ j %@4:6fX8K`bl%'"O> vw,Z \CC DHg;T&"HQX4zp "Fi}S'>q=<lL}%՗z) g0L4d Gl@75__Yi278D"" R)E\0MkPH Q\.y<~U@,NJl޺0eˀsdZ`l8Vgt8{b9trnr:SR.v` ; eB!T Ϧ(2M,1/("ꦨ8b@;GG>`,@ǁTFR;LfϞ6XxڴTbvN( x<hoonv8}vnjBx<- ??^ ϿzA4z_bDOTM R$) Pd //''?8|ȑCm>|6 ;;''7HIRSEDffFFf&__[{xFݫ999e=@(J{l?'I׉rIr y;!JeX,f3j4Z-p+W* ^( yU*%Vj>|D)-<\`fDݻٻ<9B;i1:}Q9^9o{Ֆ'W S{|jD,ZP(B7N99R)kZx1FH<xٳNHNz!==brA$ bnw8`HK#$D` AR[od26mڴ* ===h\.Νـhhj5++/ 9h 7x^ibEpk4ZF ;PlKMfMM$?;KZX/|V2HwY[K(W6HN&Ξ=}q`޼뮛=(~ ;;++;;#G94B3rNIIIIIjZy}Ͽx1NcG{;!$rB("@ ::{O>$_)M -[lU(d0RigvJ"_ \*R jDBXR J2M<@"!̟`S |ar9d=B|'ɰi׭{-7_4JVv!sș3]]$# rO)-M>VnBv˖}+& ɍV~ic}(b1[V ",1`tttMW+JBT@(x< L&:tFt@ @qqqqq10yrIIq1 8pЁ@KK{{K '%d˗}7PRRR2iё~&`fͪ5 IRh/" jZ,sd\VVVVQd$dr\NV]]@zјN( $%Pm6[X,&ii@KڶG~*/2JjU|KE991?JȾH!vpPDÀVV+ "/nϜihfϮH:Mb0L&@.W(\ݾ}mm'O:9BBXeeyyY)c56rIT]${ڵ@kАT dftG;4ݟ{+z_JoEpO9=Ʀ&_pUr* DRL&nw @ c1dJJXBw]ݾ}mm0pѣ̜9cƌYD(Sg}ދFɭ㜜4sHD;rB2EGQ\dW9x4'OȈGӤ ch>㏁^,thg~>_6D-Tyv~[|2k7=(8Lb4r~a͚wK.I5NjnKt±4Mb.Y/&"'DÄ[FG&;X\.|㑮G= 򘍦kkkYK*sdzf\uNG+xA("x&fg9S{zH`H,ɥBI*#:F <rP{]]==f3`d4m0T@I ܛ{i-ry `:^/px<) & &/O$diib4cΝ{6Z hJDr9(R)`պ 4qg3wJ`_ j g}$ܥڨ+:|Psss@8l.`pBDVXKg`/n牴TwMW.^ȔM~ 7Lܠ)OMM% n ;(/ 2H]ٿJqFF@?M4~P1L(expM --j,kgVO|[}l&]Bgr?s,HG:KJQoW.?8~OEoekFɿIaTiN^g*JHHy sGx軁? 7=knv9Υ?>6060p"f=Dߎ&®d^zm@Xjp\,*D'vbs'?^(T(f ~{),H-,[622:::Rqy.?Qp"~:-\|4 9H6y'"=rZ=QDr -BQ`dddDɔPTs}Xagׄ]'='?.11okOT] ouM^_YS:GQb>><5po!%;|?o"`"awf+h {ssngX5@͛e+?Tå!Cx*/7o&=KHхikH%tEXtdate:create2012-04-14T20:45:00+02:00A%tEXtdate:modify2012-04-14T20:45:00+02:005'tEXtsvg:base-urifile:///tmp/revelation.svgIENDB`revelation-revelation-0.5.5/data/icons/meson.build000066400000000000000000000020711423125252400222250ustar00rootroot00000000000000# Application icons apps_icons = [ ['16x16', 'info.olasagasti.revelation.png'], ['24x24', 'info.olasagasti.revelation.png'], ['32x32', 'info.olasagasti.revelation.png'], ['48x48', 'info.olasagasti.revelation.png'], ['128x128', 'info.olasagasti.revelation.png'], ['256x256', 'info.olasagasti.revelation.png'], ['scalable', 'info.olasagasti.revelation.svg'], ] foreach icon: apps_icons install_data( join_paths(icon[0], icon[1]), install_dir: join_paths(rvl_datadir, 'icons', 'hicolor', icon[0], 'apps'), ) endforeach # Mime icons install_data( join_paths('48x48', 'gnome-mime-application-x-revelation.png'), install_dir: join_paths(rvl_datadir, 'icons', 'hicolor', '48x48', 'mimetypes'), ) # Actions icons actions = [ 'document-export.svg', 'document-import.svg', 'object-locked.svg', 'password-change.svg', 'password-check.svg', 'password-generate.svg', ] foreach action: actions install_data( join_paths('scalable', action), install_dir: join_paths(rvl_pkgdatadir, 'icons', 'hicolor', 'scalable', 'actions'), ) endforeach revelation-revelation-0.5.5/data/icons/scalable/000077500000000000000000000000001423125252400216315ustar00rootroot00000000000000revelation-revelation-0.5.5/data/icons/scalable/document-export.svg000066400000000000000000000245651423125252400255230ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.5/data/icons/scalable/document-import.svg000066400000000000000000000265311423125252400255070ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.5/data/icons/scalable/info.olasagasti.revelation.svg000066400000000000000000002106471423125252400276140ustar00rootroot00000000000000 image/svg+xml Jakub Steiner Tuomas Kuosmanen http://jimmac.musichall.cz globe international web www internet network revelation-revelation-0.5.5/data/icons/scalable/object-locked.svg000066400000000000000000000165351423125252400250710ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.5/data/icons/scalable/password-change.svg000066400000000000000000001003571423125252400254450ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.5/data/icons/scalable/password-check.svg000066400000000000000000000762141423125252400253010ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.5/data/icons/scalable/password-generate.svg000066400000000000000000000755421423125252400260210ustar00rootroot00000000000000 image/svg+xml + revelation-revelation-0.5.5/data/info.olasagasti.revelation.desktop.in.in000066400000000000000000000005021423125252400266020ustar00rootroot00000000000000[Desktop Entry] Name=Revelation GenericName=Password Manager Comment=Organize and secure your passwords X-GNOME-FullName=Revelation Password Manager Exec=revelation Icon=info.olasagasti.revelation Terminal=false Type=Application Categories=GNOME;GTK;System;Security; StartupNotify=true MimeType=application/x-revelation; revelation-revelation-0.5.5/data/info.olasagasti.revelation.gschema.xml000066400000000000000000000200731423125252400263320ustar00rootroot00000000000000 'goto' Action to take on doubleclick The action to take when doubleclicking an account in the treeview - valid values are "goto", "edit", and "copy". false When copying password, also copy username (chained) If set, Revelation will copy both the username and the password to the clipboard when pressing "Copy Password" one after the other (when username is pasted, the password is automatically copied). false Autoload a file on startup If set, Revelation will automatically load a data file on startup. The file to open is specified in the "autoload_file" key. '' A file to autoload on startup The full path to a file which Revelation should autoload when starting. The "autoload" key must also be set to true for this to work. true Autolock file when inactive If set, Revelation will automatically lock the current file after a period of inactivity. The inactivity period is specified in the "autolock_timeout" key. 15 Timeout before autolocking file The number of minutes of inactivity before the data file is automatically locked. The "autolock" option must be enabled for this to take effect. false Autosave data when changed If set, Revelation will automatically save the data file when an entry is added, updated or removed. '' Launcher for creditcard accounts A command which will be executed when launching a creditcard account. '' Launcher for encryption key accounts A command which will be executed when launching a encryption key account. 'gnome-terminal --tab -- mysql -h %h %(-u %u%) %?D' Launcher for database accounts A command which will be executed when launching a database account. '' Launcher for door accounts A command which will be executed when launching a door account. '' Launcher for email accounts A command which will be executed when launching an email account. 'nautilus ftp://%(%u@%)%h%(:%o%)/' Launcher for ftp accounts A command which will be executed when launching an ftp account. '' Launcher for genereic accounts A command which will be executed when launching a generic account. '' Launcher for phone accounts A command which will be executed when launching a phone account. 'gnome-terminal --tab -- ssh %(-l %u%) %h' Launcher for shell accounts A command which will be executed when launching a shell account. 'vinagre rdp://%h%(:%o%)' Launcher for remote desktop accounts A command which will be executed when launching a remote desktop account. 'xdg-open %U' Launcher for website accounts A command which will be executed when launching a website account. 'vinagre %h%(:%o%)' Launcher for VNC accounts A command which will be executed when launching a VNC account. 8 Length of passwords The number of characters in generated passwords. A length less than 4 characters will be ignored. true Use punctuation chars for passwords If set, punctuation characters will be also used to generate passwords. 300 Initial main pane position The initial position of the pane in the main application window, in pixels. false Show passwords When set, passwords will be displayed in plain text. Turning this option off will obscure passwords with ******. false Displays the searchbar When set, Revelation will display its searchbar. true Displays the statusbar When set, Revelation will display its statusbar. true Displays the toolbar When set, Revelation will display its toolbar. 'desktop' Sets the toolbar style Sets the style of the toolbar items. "desktop" uses desktop default, "both" shows icons and text, "both-horiz" shows icons and important text, "icons" shows icons only, and "text" shows text only. 400 Initial window height The initial height of the main window, in pixels. 0 Initial horizontal window position The initial horizontal position of the main window, in pixels. 0 Initial vertical window position The initial vertical position of the main window, in pixels. 600 Initial window width The initial width of the main window, in pixels. revelation-revelation-0.5.5/data/info.olasagasti.revelation.metainfo.xml.in000066400000000000000000000116051423125252400271330ustar00rootroot00000000000000 info.olasagasti.revelation.desktop info.olasagasti.revelation.desktop CC0-1.0 GPL-2.0+ Revelation Password manager

Revelation is a password manager for the GNOME desktop, released under the GNU GPL license. It stores all your accounts and passwords in a single, secure place, and gives you access to it through a user-friendly graphical interface.

Among other features Revelation is able to:

  • Store passwords encrypted
  • Store passwords organizated
  • Autolock on idle or when desktop locks
  • Import from and export to different file formats
info.olasagasti.revelation.desktop https://revelation.olasagasti.info/screenshots/revelation-main.png A simple user interface https://revelation.olasagasti.info/screenshots/revelation-entry.png Multiple type of entries to store password https://revelation.olasagasti.info/screenshots/revelation-search.png Search entries by multiple criteria https://revelation.olasagasti.info/screenshots/revelation-shortcuts.png Shortcuts window https://revelation.olasagasti.info/screenshots/revelation-preferences.png Adjust the application to give you pace of mind https://revelation.olasagasti.info/screenshots/revelation-lock.png Hide the content when the application is idle https://revelation.olasagasti.info/ https://github.com/mikelolasagasti/revelation/issues mikel@olasagasti.info revelation none none none none none none none none none none none none none none none none none none none none none none none none none none none
revelation-revelation-0.5.5/data/meson.build000066400000000000000000000037351423125252400211220ustar00rootroot00000000000000subdir('icons') # Compile the resources resource_data = files( 'ui/help-overlay.ui', 'ui/menubar.ui', 'ui/popup-tree.ui', ) gnome.compile_resources( rvl_name, rvl_name + '.gresource.xml', gresource_bundle: true, source_dir: meson.current_build_dir(), install_dir: rvl_pkgdatadir, install: true, dependencies: resource_data, ) # Install the schema file install_data( rvl_namespace + '.gschema.xml', install_dir: join_paths(rvl_datadir, 'glib-2.0', 'schemas') ) # Install the mime file install_data( rvl_name + '.xml', install_dir: join_paths(rvl_datadir, 'mime', 'packages') ) # Merge the translations with the desktop file desktop_conf = configuration_data() desktop_conf.set('icon', rvl_namespace) i18n.merge_file( type: 'desktop', input: configure_file( output: rvl_namespace + '.desktop.in', input: rvl_namespace + '.desktop.in.in', configuration: desktop_conf), output: rvl_namespace + '.desktop', po_dir: join_paths(meson.source_root(), 'po'), install: true, install_dir: join_paths(rvl_datadir, 'applications') ) # Validate the desktop file desktop_file_validate = find_program('desktop-file-validate', required:false) if desktop_file_validate.found() test ( 'Validate desktop file', desktop_file_validate, args: join_paths(meson.current_build_dir (), rvl_namespace + '.desktop') ) endif metainfo = rvl_namespace + '.metainfo.xml' rvl_appstreamdir = join_paths(rvl_datadir, 'metainfo') # Merge the translations with the MetaInfo file i18n.merge_file( input: metainfo + '.in', output: metainfo, po_dir: join_paths(meson.source_root(), 'po'), install: true, install_dir: rvl_appstreamdir, ) # Validate the MetaInfo file appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test ( 'Validate MetaInfo file', appstream_util, args: ['validate-relax', join_paths(meson.current_build_dir (), rvl_namespace + '.metainfo.xml')] ) endif revelation-revelation-0.5.5/data/revelation.gresource.xml000066400000000000000000000006131423125252400236370ustar00rootroot00000000000000 ui/help-overlay.ui ui/menubar.ui ui/popup-tree.ui revelation-revelation-0.5.5/data/revelation.xml000066400000000000000000000006431423125252400216450ustar00rootroot00000000000000 Revelation password database revelation-revelation-0.5.5/data/ui/000077500000000000000000000000001423125252400173655ustar00rootroot00000000000000revelation-revelation-0.5.5/data/ui/help-overlay.ui000066400000000000000000000221641423125252400223400ustar00rootroot00000000000000 True True shortcuts 13 True Password files True Create a new password file <Primary>N True Open a password file <Primary>O True Save a password file <Primary>S True Close the current password file <Primary>W True Window True Lock the access to the content <Primary>L True Quit the application <Primary>Q True Toggle show passwords <Primary>P True Password entries True Add a new password entry <Primary>Insert True Add a new folder for password entries <Shift><Primary>Insert True Edit current entry <Primary>Return True Delete current entry <Primary>Delete True Copy password <Shift><Primary>C True Selection True Select all entries <Primary>A True Deselect all entries <Shift><Primary>A True Finding password entry True Show the search bar <Primary>F True Hide the search bar Escape True Find the next match <Primary>G True Find the previous match <Primary><shift>G True General True Keyboard shortcuts <Primary>question <Primary>F1 True Quit <Primary>Q revelation-revelation-0.5.5/data/ui/menubar.ui000066400000000000000000000311341423125252400213570ustar00rootroot00000000000000 _File
_New file.file-new <Control>N Create a new file document-new _Open file.file-open <Control>O Open a file document-open
_Save file.file-save <Control>S Save data to a file document-save Save _as... file.file-save-as <Control><Shift>S Save data to a different file document-save-as
Change _Password... file.file-change-password Change password of current file password-change _Lock file-exists.file-lock <Control>L Lock the current data file object-locked
_Import file.file-import Import data from a foreign file document-import _Export file.file-export Export data to a different file format document-export
_Close file.file-close <Control>W Close the application window-close _Quit file.quit <Control>Q Quit the application application-exit
_Edit
_Undo dynamic.undo <Control>Z Undo the last action edit-undo _Redo dynamic.redo <Control><Shift>Z Redo the previously undone action edit-redo
Cu_t entry-multiple.clip-cut <Control>X Cut selected entries to the clipboard edit-cut _Copy entry-multiple.clip-copy <Control>C Copy selected entries to the clipboard edit-copy Copy Pass_word entry-multiple.clip-chain <Control><Shift>C Copy password to the clipboard _Paste dynamic.clip-paste <Control>V Paste entry from clipboard edit-paste
_Select All file.select-all <Control>A Selects all entries _Deselect All file.select-none <Control><Shift>A Deselects all entries
_Find... file.find <Control>F Search for an entry edit-find Find Ne_xt find.find-next <Control>G Find the next search match go-next Find Pre_vious find.find-previous <Control><Shift>G Find the previous search match go-previous
Prefere_nces file.prefs Edit preferences preferences-system
E_ntry
_Edit entry-single.entry-edit <Control>Return Edit the selected entry document-edit Re_move entry-multiple.entry-remove <Control>Delete Remove the selected entries edit-delete _Go to dynamic.entry-goto <Control><Shift>Return Go to the selected entries go-jump
_Add Entry... entry-optional.entry-add <Control>Insert Create a new entry list-add Add _Folder... entry-optional.entry-folder <Control><Shift>Insert Create a new folder folder-new
_View
_Main Toolbar file.view-toolbar Toggle the main toolbar S_earch Toolbar file.view-searchbar Toggle the search toolbar _Statusbar file.view-statusbar Toggle the statusbar
Password _Generator file.pwgenerator Opens a password generator password-generate Password _Checker file.pwchecker Opens a password checker password-check Show _Passwords file.view-passwords <Control>P Toggle display of passwords
_Help
_About file.help-about About this application help-about _Keyboard Shortcuts win.show-help-overlay
revelation-revelation-0.5.5/data/ui/popup-tree.ui000066400000000000000000000065461423125252400220370ustar00rootroot00000000000000
_Edit entry-single.entry-edit <Control>Return Edit the selected entry document-edit Re_move entry-multiple.entry-remove <Control>Delete Remove the selected entries edit-delete _Go to dynamic.entry-goto <Control><Shift>Return Go to the selected entries go-jump
_Add Entry... entry-optional.entry-add <Control>Insert Create a new entry list-add Add _Folder... entry-optional.entry-folder <Control><Shift>Insert Create a new folder folder-new
Cu_t entry-multiple.clip-cut <Control>X Cut selected entries to the clipboard edit-cut _Copy entry-multiple.clip-copy <Control>C Copy selected entries to the clipboard edit-copy Copy Pass_word entry-multiple.clip-chain <Control><Shift>C Copy password to the clipboard _Paste dynamic.clip-paste <Control>V Paste entry from clipboard edit-paste
revelation-revelation-0.5.5/meson.build000066400000000000000000000024641423125252400202070ustar00rootroot00000000000000project('revelation', version : '0.5.5', meson_version: '>= 0.51.0' ) # Importing modules gnome = import('gnome') i18n = import('i18n') python = import('python') # Module objects py_installation = python.find_installation('python3', modules: ['Cryptodome', 'pwquality'] ) # Dependencies dependency('gobject-introspection-1.0', version: '>= 1.35.0') dependency('gtk+-3.0', version: '>= 3.22') dependency('glib-2.0') dependency('pygobject-3.0', version: '>= 3.29.1') rvl_name = meson.project_name().to_lower() rvl_namespace = 'info.olasagasti.revelation' rvl_datadir = join_paths(get_option('prefix'), get_option('datadir')) rvl_appstreamdir = join_paths(rvl_datadir, 'metainfo') rvl_pkgdatadir = join_paths(rvl_datadir, rvl_name) rvl_version = meson.project_version() bindir = join_paths(get_option('prefix'), get_option('bindir')) libdir = join_paths(py_installation.get_install_dir(), rvl_name) subdir('src') subdir('data') subdir('po') meson.add_install_script('meson_post_install.py') output = '\n' + meson.project_name() + ' ' + rvl_version + ' configure summary\n' output += '============================\n\n' output += 'pythondir.: ' + libdir + '\n' output += 'bindir....: ' + bindir + '\n' output += 'datadir...: ' + rvl_datadir + '\n' output += 'pkgdatadir: ' + rvl_pkgdatadir message(output) revelation-revelation-0.5.5/meson_post_conf.py000066400000000000000000000010131423125252400215770ustar00rootroot00000000000000#!/usr/bin/env python3 import os import subprocess build_root = os.environ.get('MESON_BUILD_ROOT') source_root = os.environ.get('MESON_SOURCE_ROOT') print('Install schemas in build dir…') source_datadir = os.path.join(source_root, 'data') source_file = os.path.join(source_datadir, 'gschemas.compiled') targetdir = os.path.join(build_root, 'data', 'glib-2.0', 'schemas') subprocess.call(['glib-compile-schemas', source_datadir]) subprocess.call(['mkdir', '-p', targetdir]) subprocess.call(['mv', source, targetdir]) revelation-revelation-0.5.5/meson_post_install.py000066400000000000000000000021211423125252400223210ustar00rootroot00000000000000#!/usr/bin/env python3 import os import subprocess prefix = os.environ.get('MESON_INSTALL_PREFIX', '/usr/local') datadir = os.path.join(prefix, 'share') # Packaging tools define DESTDIR and this isn't needed for them if 'DESTDIR' not in os.environ: print('Updating icon cache…') icon_cache_dir = os.path.join(datadir, 'icons', 'hicolor') subprocess.call(['gtk-update-icon-cache', '-qtf', icon_cache_dir]) icon_cache_dir = os.path.join(datadir, 'revelation', 'icons', 'hicolor') subprocess.call(['gtk-update-icon-cache', '-qtf', icon_cache_dir]) print("Compiling the schema…") schemas_dir = os.path.join(datadir, 'glib-2.0/schemas') subprocess.call(['glib-compile-schemas', schemas_dir]) print('Updating desktop database…') desktop_database_dir = os.path.join(datadir, 'applications') subprocess.call(['update-desktop-database', '-q', desktop_database_dir]) print("Update mime database…") mime_dir = os.path.join(datadir, 'mime') #subprocess.call(['mkdir', '-p', mime_dir]) subprocess.call(['update-mime-database', '-n', mime_dir]) revelation-revelation-0.5.5/po/000077500000000000000000000000001423125252400164555ustar00rootroot00000000000000revelation-revelation-0.5.5/po/LINGUAS000066400000000000000000000001571423125252400175050ustar00rootroot00000000000000# please keep this list sorted alphabetically # ca cs de es et eu fi fr it_IT nl lt pl pt_BR ru sr_RS sv uk zh revelation-revelation-0.5.5/po/Makevars000066400000000000000000000066761423125252400201700ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 --keyword=g_dngettext:2,3 --add-comments # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = https://github.com/mikelolasagasti/revelation # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes revelation-revelation-0.5.5/po/POTFILES.in000066400000000000000000000005171423125252400202350ustar00rootroot00000000000000src/revelation.py src/lib/config.py.in src/lib/dialog.py src/lib/entry.py src/lib/ui.py src/lib/util.py src/lib/datahandler/xhtml.py data/info.olasagasti.revelation.appdata.xml.in data/info.olasagasti.revelation.desktop.in.in data/info.olasagasti.revelation.gschema.xml data/ui/help-overlay.ui data/ui/menubar.ui data/ui/popup-tree.ui revelation-revelation-0.5.5/po/POTFILES.skip000066400000000000000000000000221423125252400205640ustar00rootroot00000000000000src/lib/config.py revelation-revelation-0.5.5/po/ca.po000066400000000000000000001567221423125252400174150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Alfredo Beaumont , 2012 # David Planella , 2010 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Catalan (http://www.transifex.com/hey_neken/revelation/" "language/ca/)\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Manquen els fitxers de dades" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Alguns dels fitxers de sistema del Revelation no s'han pogut trobar, per la " "qual cosa hauríeu de tornar-lo a instal·lar." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Manquen les dades de configuració" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "El Revelation no ha trobat les seves dades de configuració, per la qual cosa " "l'hauuríeu de tornar a instal·lar." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Fitxers de dades no vàlids" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Alguns dels fitxers de sistema del Revelation contenen dades no vàlides, per " "la qual cosa hauríeu de tornar-lo a instal·lar." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Obre" #: src/revelation.py:432 msgid "Open a file" msgstr "Obre un fitxer" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Desa" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Desa les dades en un fitxer" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Afegeix una entrada" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Crea una entrada nova" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Afegeix una carpeta" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Crea un fitxer nou" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Vés a" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Vés a les entrades seleccionades" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Edita" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Edita l'entrada seleccionada" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "_Suprimeix" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Suprimeix les entrades seleccionades" #: src/revelation.py:610 msgid "New file" msgstr "Fitxer nou" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Desfés" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Desfés %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Torna a executar" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Torna a executar %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "S'ha cancel·lat l'apertura" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "S'ha trobat una coincidència per a «%s»" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "No s'ha trobat cap coincidència amb «%s»" #: src/revelation.py:1108 msgid "Old file format" msgstr "Format de fitxer antic" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation ha detectat que el fitxer '%s' té el format vell i insegur. Es " "recomana encaridament guardar aquest fitxer amb el nou format. Revelation ho " "farà automàticament si punxes a guardar després d'obrir aquest fitxer." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "La contrasenya és incorrecta" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "La contrasenya que heu introduït per al fitxer «%s» no era correcta." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Ha fallat l'apertura" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "format de fitxer no vàlid" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "El fitxer «%s» conté dades no vàlides." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Les dades són desconegudes" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "El fitxer «%s» conté dades desconegudes. És possible que s'hagi creat amb " "una versió més nova del Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Es desconeix la versió de les dades" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "El fitxer «%s» té un número de versió massa nou. Hauríeu d'actualitzar el " "Revelation per a obrir-lo." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "No s'ha pogut detectar el tipus de fitxer" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "El tipus de fitxer del fitxer «%s» no s'ha pogut detectar automàticament. " "Hauríeu d'intentar especificar-lo manualment." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "No s'ha pogut obrir el fitxer" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "El fitxer «%s» no s'ha pogut obrir. Assegureu-vos que teniu els permisos " "apropiats per a obrir-lo." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "L'entrada no té cap contrasenya a copiar" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "s'ha copiat la contrasenya al porta-retalls" #: src/revelation.py:1195 msgid "Entries copied" msgstr "S'han copiat entrades" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Retalla entrades" #: src/revelation.py:1224 msgid "Entries cut" msgstr "s'han retallat entrades" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Enganxa les entrades" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "S'han enganxat entrades" #: src/revelation.py:1261 msgid "Add entry" msgstr "Afegeix una entrada" #: src/revelation.py:1267 msgid "Entry added" msgstr "S'ha afegit l'entrada" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "S'ha cancel·lat l'addició d'una entrada" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Edita la carpeta" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Edita l'entrada" #: src/revelation.py:1295 msgid "Update entry" msgstr "Actualitza l'entrada" #: src/revelation.py:1300 msgid "Entry updated" msgstr "S'ha actualitzat l'entrada" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "S'ha cancel·lat l'edició de l'entrada" #: src/revelation.py:1330 msgid "Folder added" msgstr "S'ha afegit la carpeta" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "S'ha cancel·lat l'addició d'una carpeta" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "No s'ha trobat cap ordre «vés a» per a les entrades «%s»" #: src/revelation.py:1370 msgid "Entry opened" msgstr "S'ha obert l'entrada" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Format d'ordre «vés a» no vàlid" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "L'ordre «vés a» per a les entrades «%s» no és vàlid. Hauríeu de corregir-ho " "a les preferències." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Manquen les dades de l'entrada" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "L'entrada «%s» no té totes les dades requerides per a obrir-la." #: src/revelation.py:1397 msgid "Move entry" msgstr "Desplaça l'entrada" #: src/revelation.py:1405 msgid "Entries moved" msgstr "S'han desplaçat entrades" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Suprimeix l'entrada" #: src/revelation.py:1438 msgid "Entries removed" msgstr "S'han suprimit entrades" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "S'ha cancel·lat la supressió de l'entrada" #: src/revelation.py:1455 msgid "Password changed" msgstr "s'ha canviat la contrasenya" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "S'ha cancel·lat el canvi de contrasenya" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "S'ha obert el fitxer %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "S'ha cancel·lat la creació d'un fitxer nou" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "S'han exportat les dades a %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "S'ha cancel·lat l'exportació" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "No s'ha pogut escriure al fitxer" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "El fitxer «%s» no s'ha pogut obrir per a escriure-hi. Assegureu-vos que " "teniu els permisos apropiats per a escriure-hi." #: src/revelation.py:1503 msgid "Export failed" msgstr "Ha fallat l'exportació" #: src/revelation.py:1519 msgid "Import data" msgstr "Importa dades" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "S'ha importat les dades de %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "S'ha cancel·lat la importació" #: src/revelation.py:1560 msgid "Locked" msgstr "Blocat" #: src/revelation.py:1561 msgid "File locked" msgstr "S'ha blocat el fitxer" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "S'ha inhabilitat la sortida degut als canvis no desats" #: src/revelation.py:1586 msgid "File unlocked" msgstr "S'ha desblocat el fitxer" #: src/revelation.py:1609 msgid "New file created" msgstr "S'ha creat un fitxer nou" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "S'ha cancel·lat la creació d'un fitxer nou" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "S'ha obert el fitxer %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "S'han desat les dades al fitxer %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "S'ha cancel·lat el desament" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "No s'ha pogut desar el fitxer" #: src/revelation.py:1666 msgid "Save failed" msgstr "Ha fallat el desament" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "S'ha cancel·lat la sortida" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "s'ha tornat a aplicar %s" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "s'ha desfet %s" #: src/revelation.py:1745 msgid "Preferences" msgstr "Preferències" #: src/revelation.py:1754 msgid "General" msgstr "General" #: src/revelation.py:1758 msgid "Interface" msgstr "Interfície" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Ordres «Vés a»" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Acció del doble clic" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Vés al compte, si és possible" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Vés al compte (obre en una aplicaciäo externa) en fer-hi doble clic, en cas " "que hàgiu emplenat les dades requerides" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Edita el compte" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Edita el compte en fer doble clic" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Copia la contrasenya al porta-retalls" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia la contrasenya del compte al porta-retalls en fer doble clic" #: src/revelation.py:1803 msgid "Files" msgstr "Fitxers" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Obre aquest fitxer en iniciar:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Si s'habilita, en iniciar-se el programa s'obrirà aquest fitxer " #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Seleccioneu el fitxer a obrir automàticament" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Fitxers del Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Tots els fitxers" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Fitxer a obrir en iniciar el Revelation" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Desa les dades automàticament quan canviïn" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "Desa el fitxer de dades en afegir, modificar o suprimir una entrada" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Bloca el fitxer després d'haver estat inactiu durant" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" "Bloca el fitxer de dades automàticament després d'un període d'inactivitat" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "El període d'inactivitat abans de blocar el fitxer, en minuts" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minuts" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Ordre «Vés a» per a comptes %s. Es poden utilitzar les variables d'expansió " "següents:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: el signe \"%\"" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: variable d'expansió opcional" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): expansió de subcadena opcional" #: src/revelation.py:1895 msgid "Passwords" msgstr "Contrasenyes" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Mostra les contrasenyes i altres secrets" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Mostra les contrasenyes i altres secrets (en cas contrari, s'amaguen amb els " "símbols ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Copia també el nom d'usuari en copiar la contrasenya" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "En copiar una contrasenya al porta-retalls, introdueix el nom d'usuari abans " "de la contrasenya com a «cadena» del porta-retalls" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Usa caràcters de puntuació per a les contrasenyes" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "En generar les contrasenyes, utilitza caràcters de puntuació com %, =, { o ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" "El nombre de caràcters que tindran les contrasenyes generades; se'n " "recomanen 8 o més" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Llargada de les contrasenyes generades" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Estil de la barra d'eines" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Utilitza la configuració predeterminada de l'escriptori" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Mostra els elements de la barra d'eines amb l'estil predeterminat" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Mostra les icones i el text" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Mostra els elements de la barra d'eines amb icones i text" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Mostra les icones i el text important" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" "Mostra els elements de la barra d'eines amb text només al costat de les " "icones importants" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Mostra només les icones" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Mostra els elements de la barra d'eines només amb icones" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Mostra només el text" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Mostra els elements de la barra d'eines només amb text" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Ha canviat el fitxer" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Ha canviat el fitxer actual «%s». Voleu tornar-lo a carregar?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Voleu desar els canvis al fitxer actual?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Heu fet canvis que no s'han desat. Si creeu un fitxer nou sense desar, es " "perdran aquests canvis." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Voleu desar els canvis abans d'obrir?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Heu fet canvis que no s'han desat. Si obriu un fitxer diferent sense desar, " "es perdran aquests canvis." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Voleu desar els canvis abans de sortir?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Heu fet canvis que no s'han desat. Si sortiu sense desar, es perdran aquests " "canvis." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Voleu desar els canvis abans d'obrir?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Heu fet canvis que no s'han desat. Si sortiu sense desar, es perdran aquests " "canvis." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Voleu reemplaçar el fitxer existent?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "El fitxer «%s» ja existeix. Voleu reemplaçar-lo?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Voleu desar en un fitxer insegur?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Heu triat desar les vostres contrasenyes en un format de fitxer no segur " "(sense encriptar). Qualsevol persona que accedeixi al fitxer podrà veure les " "vostres contrasenyes." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Seleccioneu el fitxer on exportar" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Tipus de fitxer" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Seleccioneu el fitxer a importar" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Detecció automàtica" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Seleccioneu el fitxer a obrir" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Seleccioneu el fitxer on desar" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Introduïu la contrasenya nova" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Introduïu una contrasenya nova per al fitxer de dades actual. Abans " "d'aplicar-la, haureu de desar el fitxer." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Contrasenya actual" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Contrasenya nova" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Confirmeu la contrasenya" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "La contrasenya que heu introduït per al fitxer actual no és correcta." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Les contrasenyes no coincideixen" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "" "La contrasenya i la confirmació de contrasenya que heu introduït no " "concorden." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Voleu utilitzar una contrasenya insegura?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "La contrasenya que heu introduït no és segura; %s. Segur que voleu utilitzar-" "la?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Introduïu la contrasenya per a desblocar el fitxer" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "S'ha blocat el fitxer actual. Introduïu-ne la contrasenya per a desblocar-lo." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Contrasenya" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" "La contrasenya que heu introduït no fou correcta. Hauríeu de tornar-ho a " "intentar." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Introduïu la contrasenya del fitxer" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "El fitxer '%s' està xifrat. Per favor introdueix la contrasenya del fitxer " "per obrir-ho." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Introduïu la contrasenya del fitxer" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Per favor introdueix una contrasenya per al fitxer '%s'. Necessitaràs " "aquesta contrasenya per obrir el fitxer més tard." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Les contrasenyes que heu introduït no concorden." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "No s'ha introduït cap contrasenya" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Heu d'introduir una contrasenya per al fitxer de dades nou." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Dades del compte" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notes" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "El nom de l'entrada" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nom" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Una descripció de l'entrada" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Descripció" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "El tipus d'entrada" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tipus" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notes per a l'entrada" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "No s'ha especificat cap nom" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Heu d'introduir un nom per al compte" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Segur que voleu suprimir les «%i» entrades seleccionades?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "En suprimir aquestes entrades, també suprimireu aquelles entrades que " "continguin." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Segur que voleu suprimir la carpeta «%s»?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "En suprimir aquesta carpeta, també suprimireu tots els comptes i carpetes " "que contingui." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Segur que voleu suprimir el compte «%s»?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Confirmeu que voleu suprimir aquest compte." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "El nom de la carpeta" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Una descripció de la carpeta" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Heu d'introduir un nom per a la carpeta" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Un gestor de contrasenyes per a l'escriptori GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "s'ha produït un error desconegut" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "S'ha produït un error desconegut. Hauríeu d'enviar el text de sota als " "desenvolupadors del Revelation, explicant-los què estàveu fent quan s'ha " "produït. Podeu intentar seguint fent servir el Revelation, però pot ser que " "no funcioni correctament." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Comprovador de contrasenyes" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Introduïu una contrasenya a comprovar" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "El resultat de la comprovació" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "La contrasenya sembla bona" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "La contrasenya %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Generador de contrasenyes" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "La contrasenya generada" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Llargada" #: src/lib/entry.py:170 msgid "Folder" msgstr "Carpeta" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Targeta de crèdit" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Clau criptogràfica" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Base de dades" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Pany de porta" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Adreça electrònica" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Genèric" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telèfon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Intèrpret d'ordres" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Escriptori remot" #: src/lib/entry.py:355 msgid "Website" msgstr "Lloc web" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Número de targeta" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "El número d'una targeta de crèdit; generalment de 16 dígits" #: src/lib/entry.py:438 msgid "Card type" msgstr "Tipus de targeta" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "El tipus de targeta de crèdit, com ara VISA o MasterCard" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Un número de verificació de targeta de crèdit, normalment un codi de tres " "dígits al dors de la carta" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificat, com ara un certificat SSL X.509" #: src/lib/entry.py:474 msgid "Code" msgstr "Codi" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Un codi per a accedir a quelcom" #: src/lib/entry.py:487 msgid "A database name" msgstr "Un nom de base de dades" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domini" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Un domini d'Internet o d'entrada, com ara organització.cat o bé un domini " "d'entrada del Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Una adreça de correu electrònic" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Data de venciment" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "El mes en el qual venç la validesa de la carta" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Nom del servidor" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" "El nom d'un ordinador, com ara ordinador.domini.cat o bé ELMEUORDINADOR" #: src/lib/entry.py:546 msgid "Key File" msgstr "Fitxer de clau" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Un fitxer de clau utilitzat per a l'autenticació, per exemple a través " "d'SSH, o per a encriptar certificats X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Ubicació" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Una ubicació física, com ara l'entrada de l'oficina" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Una combinació de paraules o caràcters secreta utilitzada per a donar prova " "que hi teniu accés" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Número de telèfon" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Un número de telèfon" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Un número d'identificació personal (PIN), un codi numèric que s'utilitza en " "targetes de crèdit, telèfons, etc" #: src/lib/entry.py:606 msgid "Port number" msgstr "Número de port" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" "Un número de port de xarxa utilitzat per a accedir a serveis de xarxa " "directament" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" "Un localitzador uniforme de recursos (URL), com ara l'adreça d'un lloc web" #: src/lib/entry.py:630 msgid "Username" msgstr "Nom d'usuari" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Un nom o una altra identificació per a identificar-vos" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "Co_ntinua" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "E_xporta" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Genera" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importa" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Afegeix l'entrada" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Afegeix la carpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Canvia" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Torna a carregar" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Reemplaça" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Desbloca" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Actualitza" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Descarta" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Bloca" #: src/lib/ui.py:114 msgid "Next" msgstr "Següent" #: src/lib/ui.py:116 msgid "_Check" msgstr "Compro_va" #: src/lib/ui.py:119 msgid "Previous" msgstr "Anterior" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Desconegut" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Copia la contrasenya" #: src/lib/ui.py:628 msgid "Select File" msgstr "Seleccioneu el fitxer" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Navega..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Genera" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notes: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "S'ha actualitzat fa %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Text a cercar" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Qualsevol tipus" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Cerca la coincidència anterior" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Cerca la coincidència següent" #: src/lib/util.py:48 msgid "is too short" msgstr "és massa curta" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "no äes prou variat" #: src/lib/util.py:83 msgid "is too weak" msgstr "és massa dèbil" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "és un palíndrom" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i segons" #: src/lib/util.py:348 msgid "years" msgstr "anys" #: src/lib/util.py:348 msgid "year" msgstr "any" #: src/lib/util.py:356 msgid "months" msgstr "mesos" #: src/lib/util.py:356 msgid "month" msgstr "mes" #: src/lib/util.py:360 msgid "weeks" msgstr "setmanes" #: src/lib/util.py:360 msgid "week" msgstr "setmana" #: src/lib/util.py:364 msgid "days" msgstr "dies" #: src/lib/util.py:364 msgid "day" msgstr "dia" #: src/lib/util.py:368 msgid "hours" msgstr "hores" #: src/lib/util.py:368 msgid "hour" msgstr "hora" #: src/lib/util.py:372 msgid "minute" msgstr "minut" #: src/lib/util.py:376 msgid "seconds" msgstr "segons" #: src/lib/util.py:376 msgid "second" msgstr "segon" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Llista de comptes del Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Llista de comptes" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Creat:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Versió del Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Fitxer a obrir en iniciar el Revelation" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Gestor de Contrasenyes" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Organitza i assegura les teves contrasenyes" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Edita el compte en fer doble clic" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Obre aquest fitxer en iniciar:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Obre aquest fitxer en iniciar:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Bloca el fitxer després d'haver estat inactiu durant" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Desa les dades automàticament quan canviïn" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "Desa el fitxer de dades en afegir, modificar o suprimir una entrada" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Llargada de les contrasenyes generades" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" "El nombre de caràcters que tindran les contrasenyes generades; se'n " "recomanen 8 o més" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Usa caràcters de puntuació per a les contrasenyes" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Usa caràcters de puntuació per a les contrasenyes" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Mostra les contrasen_yes" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Estil de la barra d'eines" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Contrasenyes" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Crea un fitxer nou" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Obre un fitxer" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Introduïu la contrasenya del fitxer" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Contrasenya actual" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Contrasenya nova" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Generador de contrasenyes" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "No s'ha introduït cap contrasenya" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Edita l'entrada" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Copia la contrasenya" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Seleccioneu el fitxer" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Retalla entrades" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_No seleccionis res" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "No s'ha introduït cap contrasenya" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Text a cercar" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Cerca la coincidència següent" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Cerca la coincidència anterior" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "General" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "_Surt" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Fitxer" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nou" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "_Anomena i desa..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Canvia la contrasen_ya..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Tanca" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Surt" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Re_talla" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Copia" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Copiar contrasenya" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "Engan_xa" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Selecciona-ho tot" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_No seleccionis res" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Cerca..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Cerca el se_güent" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Cerca l'a_nterior" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Preferè_ncies" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "E_ntrada" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Afegeix una entrada …" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Afegeix una ca_rpeta..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Visualitza" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Barra d'eines principal" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Barra d'eines de _cerca" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Barra d'estat" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Generador de contrasenyes" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Co_mprovador de contrasenyes" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Mostra les contrasen_yes" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "A_juda" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Quant a" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "No s'ha trobat cap coincidència" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "La cadena «%s» no concorda amb cap entrada. Intenteu cercar una altra " #~ "frase diferent." #~ msgid " Find:" #~ msgstr " Cerca:" #~ msgid "The type of account to search for" #~ msgstr "El tipus de compte a cercar" revelation-revelation-0.5.5/po/cs.po000066400000000000000000001425061423125252400174320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Czech (http://www.transifex.com/hey_neken/revelation/language/" "cs/)\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " "<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Chybí datové soubory" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Některé ze systémových souborů Revelation nebyly nalezeny, reinstalujte " "Revelation, prosím." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Chybí konfigurační data" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation nenalezl konfigurační data, reinstalujte Revelelation, prosím." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Neplatné datové soubory" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Některé ze systémových souborů Revelation obsahují neplatná data, " "reinstalujte Revelation, prosím." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Otevřít" #: src/revelation.py:432 msgid "Open a file" msgstr "Otevřít soubor" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Uložit" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Uložit data do souboru" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Přidat položku" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Vytvořit novou položku" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Přidat složku" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Vytvořit novou složku" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Přejít na" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Přejít na vybrané položky" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Upravit" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Upravit vybranou položku" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Odst_ranit" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Odstranit vybrané položky" #: src/revelation.py:610 msgid "New file" msgstr "Nový soubor" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Zpět" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Zpět %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "Zn_ovu" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Znovu %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Otevírání zrušeno" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Nalezena shoda pro '%s'" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Nebyly nalezeny shody pro '%s'" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Nesprávné heslo" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Heslo k souboru '%s' není správné." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Otevírání selhalo" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Neplatný formát souboru" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Soubor '%s' obsahuje neplatná data." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Neznámá data" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Soubor '%s' obsahuje neznámá data. Mohl být vytvořen novější verzí " "Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Neznámá verze dat" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "Soubor '%s' je v novější verzi, aktualizujte svůj Revelation." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Nelze určit typ souboru" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Nelze otevřít soubor" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Soubor '%s' nelze otevřít. Ujistěte se, že existuje a že máte potřebná " "oprávnění." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Položka nemá heslo ke kopírování" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Heslo zkopírováno do schránky" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Položky zkopírovány" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Vyjmout položky" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Položky vyjmuty" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Vložit položky" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Položky vloženy" #: src/revelation.py:1261 msgid "Add entry" msgstr "Přidat položku" #: src/revelation.py:1267 msgid "Entry added" msgstr "Položka přidána" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Přidání položky bylo zrušeno" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Upravit složku" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Upravit položku" #: src/revelation.py:1295 msgid "Update entry" msgstr "Aktualizovat položku" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Položka aktualizována" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Úprava položky byla zrušena" #: src/revelation.py:1330 msgid "Folder added" msgstr "Složka přidána" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Přidání složky bylo zrušeno" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Položka otevřena" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Neplatný formát příkazu akce" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Chybí data položek" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "Přesunout položku" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Položky přesunuty" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Odstranit položku" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Položky odstraněny" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Odstranění položky zrušeno" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Změna hesla zrušena" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Byl otevřen soubor %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Vytvoření nového souboru zrušeno" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Data exportována do %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Export byl zrušen" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Nelze zapisovat do souboru" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "Export selhal" #: src/revelation.py:1519 msgid "Import data" msgstr "Importovat data" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Data importována z %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Import zrušen" #: src/revelation.py:1560 msgid "Locked" msgstr "Uzamčeno" #: src/revelation.py:1561 msgid "File locked" msgstr "Soubor byl uzamčen" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Ukončení zrušeno kvůli neuloženým změnám" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Soubor byl odemčen" #: src/revelation.py:1609 msgid "New file created" msgstr "Vytvořen nový soubor" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Vytvoření nového souboru zrušeno" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Byl otevřen soubor %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Data uložena do souboru %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Ukládání zrušeno" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Nelze uložit soubor" #: src/revelation.py:1666 msgid "Save failed" msgstr "Ukládání selhalo" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Ukončení zrušeno" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "Nastavení" #: src/revelation.py:1754 msgid "General" msgstr "Obecné" #: src/revelation.py:1758 msgid "Interface" msgstr "Rozhraní" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Příkazy pro akce" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Akce při dvojkliku" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Provést akci, je-li to možné" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Upravit účet" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Upravit účet po dvojkliku" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Kopírovat heslo do schránky" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Při dvojkliku kopírovat heslo k účtu do schránky" #: src/revelation.py:1803 msgid "Files" msgstr "Soubory" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Při spuštění otevřít:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Pokud je zaškrtnuto, načte se soubor při spuštění programu" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Vybrat soubor k automatickému otevření" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Soubory Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Všechny soubory" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Při spuštění Revelation otevřít tento soubor" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Automaticky uložit data po provedení změn" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Pokud je přidána, upravena nebo odstraněna položka, automaticky uložit soubor" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Zamknout při nečinnosti po" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automaticky zamknout datový soubor při nečinnosti" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Po jaké době nečinnosti zamknout soubor (v minutách)" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minut" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "Hesla" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Zobrazit hesla a jiná tajemství" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Zobrazovat hesla a další tajemství (PIN kódy apod.), jinak schovat za ******" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Při kopírování hesla kopírovat i uživatelské jméno" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Počet znaků ve vytvářených heslech - doporučeno 8 a více znaků" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Délka generovaných hesel" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Styl lišty nástrojů" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Výchozí nastavení desktopu" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Zobrazit ikony a text" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Zobrazit ikony a důležitý text" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Zobrazit pouze ikony" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Zobrazit v hlavní liště jen ikony" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Zobrazit pouze text" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Soubor byl změněn" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Aktuální souboru '%s' byl změněn. Chcete jej znovu načíst?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Uložit změny v aktuálním souboru?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Uložit změny před otevřením?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Uložit změny před ukončením?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Uložit změny před otevřením?" #: src/lib/dialog.py:350 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Nahradit existující soubor?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Soubor '%s' již existuje - opravdu chcete nahradit tento soubor?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Uložit do nezabezpečeného souboru?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Vybrat soubor, do kterého exportovat" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Typ souboru" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Vybrat soubor pro import" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Detekovat automaticky" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Vybrat soubor k otevření" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Vyberte soubor pro uložení" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Vložte nové heslo" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Vložte nové heslo pro aktuální soubor. Před aplikováním nového hesla musí " "být soubor uložen." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Aktuální heslo" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nové heslo" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Potvrdit heslo" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Hesla nesouhlasí" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Použít nebezpečné heslo?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "K odemčení souboru vložte heslo" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Aktuální soubor byl uzamčen, pro odemčení vložte heslo." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Heslo" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Vložené heslo není správné, zkuste to znova." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Vložte heslo souboru" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Vložte heslo pro soubor" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Vložená hesla nesouhlasí." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Nebylo vloženo heslo" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Pro nový soubor s daty musíte vložit heslo." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Data účtu" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Název položky" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Název" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Popis položky" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Popis" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Typ položky" #: src/lib/dialog.py:859 msgid "Type" msgstr "Typ" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nebyl vložen název" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Musíte napsat název účtu" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Opravdu odstranit %i vybraných položek?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Odstraněním těchto položek odstraníte všechny položky v nich obsažené." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Opravdu odstranit složku '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Opravdu odstranit účet '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Potvrďte, prosím, odstranění tohoto účtu." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Název složky" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Popis složky" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Musíte napsat název složky" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Správce hesel pro prostředí GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Neznámá chyba" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Kontrolor hesel" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Vložte kontrolované heslo" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Výsledek zkoušky" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Heslo je dobré" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Heslo %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Generátor hesel" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Vygenerované heslo" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Délka" #: src/lib/entry.py:170 msgid "Folder" msgstr "Adresář" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kreditkarta" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Databáze" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Dveřní zámek" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Email" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Obecné" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:355 msgid "Website" msgstr "Webstránka" #: src/lib/entry.py:371 msgid "VNC" msgstr "" #: src/lib/entry.py:426 msgid "Card number" msgstr "Číslo karty" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Číslo kreditní karty, obvykle 16-ti místné číslo" #: src/lib/entry.py:438 msgid "Card type" msgstr "Typ karty" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ kreditní karty (MasterCard, Visa...)" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV číslo" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certifikát" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Certifikát, např. X.509 SSL certifikát" #: src/lib/entry.py:474 msgid "Code" msgstr "Kód" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:487 msgid "A database name" msgstr "Název databáze" #: src/lib/entry.py:498 msgid "Domain" msgstr "Doména" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:511 msgid "An email address" msgstr "Emailová adresa" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Datum expirace" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Měsíc expirace kreditní karty" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Název počítače, typicky pocitac.domena.cz nebo MUJPOCITAC" #: src/lib/entry.py:546 msgid "Key File" msgstr "" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:558 msgid "Location" msgstr "Umístění" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Fyzické umístění, např. vchod do kanceláře" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefonní číslo" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Telefonní číslo" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:606 msgid "Port number" msgstr "Číslo portu" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL, např. webová adresa" #: src/lib/entry.py:630 msgid "Username" msgstr "Uživatelské jméno" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Pokračovat" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exportovat" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Vygenerovat" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importovat" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Přidat položku" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Přidat složku" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Změnit" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Znovu načíst" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Nahradit" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Odemknout" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Aktualizovat" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Zahodit" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Zamknout" #: src/lib/ui.py:114 msgid "Next" msgstr "Další" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Zkontrolovat" #: src/lib/ui.py:119 msgid "Previous" msgstr "Předchozí" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Neznámé" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Kopírovat heslo" #: src/lib/ui.py:628 msgid "Select File" msgstr "Vybrat soubor" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Procházet..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Generovat" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "%s od aktualizace" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Hledat text" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Jakýkoli typ" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Najít předchozí shodu" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Nalézt shodu" #: src/lib/util.py:48 msgid "is too short" msgstr "je příliš krátké" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "není dostatečně různorodé" #: src/lib/util.py:83 msgid "is too weak" msgstr "je příliš slabé" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "je palindrom" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekund" #: src/lib/util.py:348 msgid "years" msgstr "let" #: src/lib/util.py:348 msgid "year" msgstr "rok" #: src/lib/util.py:356 msgid "months" msgstr "měsíce" #: src/lib/util.py:356 msgid "month" msgstr "měsíc" #: src/lib/util.py:360 msgid "weeks" msgstr "týdnů" #: src/lib/util.py:360 msgid "week" msgstr "týden" #: src/lib/util.py:364 msgid "days" msgstr "dny" #: src/lib/util.py:364 msgid "day" msgstr "den" #: src/lib/util.py:368 msgid "hours" msgstr "hodiny" #: src/lib/util.py:368 msgid "hour" msgstr "hodina" #: src/lib/util.py:372 msgid "minute" msgstr "minuta" #: src/lib/util.py:376 msgid "seconds" msgstr "sekundy" #: src/lib/util.py:376 msgid "second" msgstr "sekunda" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Seznam účtů Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Seznam účtů" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Vytvořeno:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Verze Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Při spuštění Revelation otevřít tento soubor" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Upravit účet po dvojkliku" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Při spuštění otevřít:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Při spuštění otevřít:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Zamknout při nečinnosti po" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Automaticky uložit data po provedení změn" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Pokud je přidána, upravena nebo odstraněna položka, automaticky uložit soubor" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Délka generovaných hesel" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Počet znaků ve vytvářených heslech - doporučeno 8 a více znaků" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Zobrazit _hesla" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Styl lišty nástrojů" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Hesla" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Vytvořit novou složku" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Otevřít soubor" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Vložte heslo pro soubor" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Aktuální heslo" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nové heslo" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Generátor hesel" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Nebylo vloženo heslo" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Upravit položku" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Kopírovat heslo" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Vybrat soubor" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Vyjmout položky" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Zrušit výběr" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Nebylo vloženo heslo" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Hledat text" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Nalézt shodu" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Najít předchozí shodu" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Obecné" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "U_končit" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Soubor" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nový" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Uložit _jako..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Změnit heslo..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Zavřít" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "U_končit" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "_Vyjmout" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Kopírovat" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "V_loži" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Vybrat vše" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "Zrušit výběr" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Hledat" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Najít další" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Najít předchozí" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Nastave_ní" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "_Položka" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Přidat položku..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Přidat sl_ožku..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Zobrazit" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Hlavní nástrojová lišta" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Lišta vyhledávání" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Stavový řádek" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Generátor hesel" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Kontrolor hesel" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Zobrazit _hesla" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Nápověda" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_O aplikaci" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Shoda nenalezena" #~ msgid " Find:" #~ msgstr " Hledat:" #~ msgid "The type of account to search for" #~ msgstr "Typ účtu, který hledat" revelation-revelation-0.5.5/po/de.po000066400000000000000000001562131423125252400174150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Christian Hartlage , 2016 # Christian Sagmüler , 2006 # Christian Sagmüller , 2006 # Daniel Schindler , 2007 # Tobias Quathamer , 2012 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: German (http://www.transifex.com/hey_neken/revelation/" "language/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Datendateien fehlen" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Einige Revelation-Systemdateien konnten nicht gefunden werden. Bitte " "installieren Sie Revelation neu." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Konfigurationsdaten fehlen" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Die Konfigurationsdaten von Revelation konnten nicht gefunden werden. Bitte " "installieren Sie Revelation neu." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Ungültige Datendateien" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Einige Revelation-Systemdateien enthalten ungültige Daten. Bitte " "installieren Sie Revelation neu." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Öffnen" #: src/revelation.py:432 msgid "Open a file" msgstr "Eine Datei öffnen" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Speichern" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Daten in einer Datei speichern" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Eintrag hinzufügen" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Neuen Eintrag erstellen" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Ordner hinzufügen" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Neuen Ordner erstellen" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Gehe zu" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Zu den ausgewählten Einträgen gehen" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Bearbeiten" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Den ausgewählten Eintrag bearbeiten" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "En_tfernen" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Ausgewählte Einträge entfernen" #: src/revelation.py:610 msgid "New file" msgstr "Neue Datei" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Rückgängig" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Rückgängig: %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Wiederherstellen" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Wiederherstellen: %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Öffnen abgebrochen" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Treffer gefunden für »%s«" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Kein Treffer für »%s« gefunden" #: src/revelation.py:1108 msgid "Old file format" msgstr "Altes Dateiformat" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation hat festgestellt, dass die Datei »%s« im alten und darüber hinaus " "unsicheren Dateiformat vorliegt. Es wird dringend empfohlen, diese Datei im " "neuen Format zu speichern. Revelation wird dies automatisch erledigen, wenn " "Sie »Speichern« wählen, nachdem Sie die Datei geöffnet haben." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Falsches Passwort" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Das angegebene Passwort für die Datei »%s« war nicht korrekt." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Öffnen fehlgeschlagen" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Ungültiges Dateiformat" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Die Datei »%s« enthält ungültige Daten." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Unbekannte Daten" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Die Datei »%s« enthält unbekannte Daten. Möglicherweise wurde sie mit einer " "neueren Version von Revelation erstellt." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Unbekannte Datenversion" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Die Datei »%s« hat eine neuere Versionsnummer. Bitte aktualisieren Sie " "Revelation, um sie zu öffnen." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Dateityp kann nicht erkannt werden" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Der Dateityp der Datei »%s« konnte nicht automatisch erkannt werden. " "Versuchen Sie, diesen manuell anzugeben." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Datei kann nicht geöffnet werden" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Die Datei »%s« konnte nicht geöffnet werden. Stellen Sie sicher, dass die " "Datei existiert und Sie die nötigen Rechte haben." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Der Eintrag hat kein Passwort zum Kopieren" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Das Passwort wurde in die Zwischenablage kopiert" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Einträge kopiert" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Einträge ausschneiden" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Einträge ausgeschnitten" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Einträge einfügen" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Einträge eingefügt" #: src/revelation.py:1261 msgid "Add entry" msgstr "Eintrag hinzufügen" #: src/revelation.py:1267 msgid "Entry added" msgstr "Eintrag hinzugefügt" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Eintrag hinzufügen abgebrochen" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Ordner bearbeiten" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Eintrag bearbeiten" #: src/revelation.py:1295 msgid "Update entry" msgstr "Eintrag aktualisieren" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Eintrag aktualisiert" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Eintrag bearbeiten abgebrochen" #: src/revelation.py:1330 msgid "Folder added" msgstr "Ordner hinzugefügt" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Ordner hinzufügen abgebrochen" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Kein aufzurufender Befehl für %s-Einträge gefunden" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Eintrag geöffnet" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Ungültiges Format für aufzurufenden Befehl" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "Der aufzurufende Befehl für »%s«-Einträge ist ungültig, bitte korrigieren " "Sie dies in den Einstellungen." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Eintragsdaten fehlen" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" "Der Eintrag »%s« enthält nicht alle Daten, die zum Öffnen benötigt werden." #: src/revelation.py:1397 msgid "Move entry" msgstr "Eintrag verschieben" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Einträge verschoben" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Eintrag entfernen" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Einträge entfernt" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Eintrag entfernen abgebrochen" #: src/revelation.py:1455 msgid "Password changed" msgstr "Passwort geändert" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Passwort ändern abgebrochen" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Datei %s geöffnet" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Neue Datei abgebrochen" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Daten nach %s exportiert" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Export abgebrochen" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Datei kann nicht geschrieben werden" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Die Datei »%s« konnte nicht zum Schreiben geöffnet werden. Stellen Sie " "sicher, dass Sie die nötigen Rechte haben." #: src/revelation.py:1503 msgid "Export failed" msgstr "Export fehlgeschlagen" #: src/revelation.py:1519 msgid "Import data" msgstr "Daten importieren" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Daten von %s importiert" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Import abgebrochen" #: src/revelation.py:1560 msgid "Locked" msgstr "Gesperrt" #: src/revelation.py:1561 msgid "File locked" msgstr "Datei gesperrt" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Beenden wegen ungespeicherter Änderungen deaktiviert" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Datei entsperrt" #: src/revelation.py:1609 msgid "New file created" msgstr "Neue Datei erstellt" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Neue Datei abgebrochen" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Datei %s geöffnet" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Daten in Datei %s gespeichert" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Speichern abgebrochen" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Datei kann nicht gespeichert werden" #: src/revelation.py:1666 msgid "Save failed" msgstr "Speichern fehlgeschlagen" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Beenden abgebrochen" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s wiederhergestellt" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s rückgängig gemacht" #: src/revelation.py:1745 msgid "Preferences" msgstr "Einstellungen" #: src/revelation.py:1754 msgid "General" msgstr "Allgemein" #: src/revelation.py:1758 msgid "Interface" msgstr "Schnittstelle" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Aufzurufende Befehle" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Doppelklick-Aktion" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Zum Konto gehen, wenn möglich" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Beim Doppelklick wird das Konto aufgerufen (in einer externen Anwendung " "geöffnet), falls die erforderlichen Daten eingegeben sind" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Konto bearbeiten" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Das Konto bei Doppelklick bearbeiten" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Passwort in die Zwischenablage kopieren" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Das Kontenpasswort bei Doppelklick in die Zwischenablage kopieren" #: src/revelation.py:1803 msgid "Files" msgstr "Dateien" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Datei beim Start öffnen:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Wenn dies aktiviert ist, wird diese Datei beim Programmstart geöffnet" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Datei zum automatischen Öffnen auswählen" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation-Dateien" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Alle Dateien" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Datei, die geöffnet werden soll, wenn Revelation gestartet wird" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Automatisches Speichern bei Änderungen der Daten" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Automatisches Speichern der Datendatei, wenn ein Eintrag hinzugefügt, " "verändert oder entfernt wird" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Datei sperren, wenn inaktiv für" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatisches Sperren der Datendatei nach einer Weile der Inaktivität" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Die Inaktivitäts-Zeitspanne, bevor die Datei gesperrt wird; in Minuten" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "Minuten" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Aufzurufender Befehl für %s-Konten. Die folgenden Ersetzungsvariablen können " "verwendet werden:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: das »%« Zeichen" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: optionale Ersetzungsvariable" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): optionale Teilzeichenkettenersetzung" #: src/revelation.py:1895 msgid "Passwords" msgstr "Passwörter" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Passwörter und andere Geheimnisse anzeigen" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Passwörter und andere Geheimnisse wie PIN-Codes anzeigen (anderenfalls mit " "****** verstecken)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Auch den Benutzernamen kopieren, wenn das Passwort kopiert wird" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "Beim Kopieren des Passworts in die Zwischenablage wird der Benutzername vor " "dem Passwort kopiert, als eine Art Zwischenablagen-Kette." #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Sonderzeichen für Passwörter verwenden" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Beim Erzeugen von Passwörtern werden Sonderzeichen wie %, =, { oder . " "verwendet." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" "Die Anzahl der Zeichen in erzeugten Passwörtern - 8 oder mehr sind empfohlen" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Länge der erzeugten Passwörter" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Werkzeugleisten-Stil" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Desktop-Voreinstellung benutzen" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Werkzeugleisten-Elemente im voreingestellten Stil anzeigen" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Symbole und Text anzeigen" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Werkzeugleisten-Elemente mit Symbolen und Text anzeigen" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Symbole und wichtigen Text anzeigen" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Werkzeugleisten-Elemente mit Text neben wichtigen symbolen anzeigen" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Nur Symbole anzeigen" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Werkzeugleisten-Elemente nur mit Symbolen anzeigen" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Nur Text anzeigen" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Werkzeigleisten-Elemente nur mit Text anzeigen" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Datei wurde verändert" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Die aktuelle Datei »%s« hat sich geändert. Wollen Sie sie neu laden?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Änderungen in die aktuelle Datei speichern?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Sie haben Änderungen vorgenommen, die noch nicht gespeichert wurden. Wenn " "Sie eine neue Datei erstellen, ohne zu speichern, gehen diese Änderungen " "verloren." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Änderungen vor dem Öffnen speichern?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Sie haben Änderungen vorgenommen, die noch nicht gespeichert wurden. Wenn " "Sie eine andere Datei öffnen, ohne zu speichern, gehen diese Änderungen " "verloren." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Änderungen vor dem Beenden speichern?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Sie haben Änderungen vorgenommen, die noch nicht gespeichert wurden. Wenn " "Sie das Programm beenden, ohne zu speichern, gehen diese Änderungen verloren." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Änderungen vor dem Öffnen speichern?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Sie haben Änderungen vorgenommen, die noch nicht gespeichert wurden. Wenn " "Sie das Programm beenden, ohne zu speichern, gehen diese Änderungen verloren." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Vorhandene Datei ersetzen?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Die Datei »%s« ist bereits vorhanden - möchten Sie diese ersetzen?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "In eine unsichere Datei speichern?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Sie haben ausgewählt, dass Ihre Passwörter in einer unsicheren (nicht " "verschlüsselten) Datei gespeichert werden - wenn jemand Zugriff auf diese " "Datei hat, kann derjenige alle Ihre Passwörter ansehen." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Datei zum Exportieren auswählen" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Dateityp" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Datei zum Importieren auswählen" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Automatisch erkennen" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Datei zum Öffnen auswählen" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Datei zum Speichern auswählen" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Geben Sie ein neues Passwort ein" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Geben Sie ein neues Passwort für die Datendatei an. Die Datei muss " "gespeichert sein, bevor das neue Passwort angewandt wird." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Aktuelles Passwort" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Neues Passwort" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Passwort bestätigen" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Das angegebene Dateipasswort für die aktuelle Datei ist ungültig." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Passwörter stimmen nicht überein" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Passwort und Passwortbestätigung stimmen nicht überein." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Unsicheres Passwort verwenden?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Das angegebene Passwort ist nicht sicher; %s. Wollen Sie es wirklich " "verwenden?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Geben Sie ein Passwort zum Entsperren der Datei ein" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Die aktuelle Datei wurde gesperrt. Bitte geben Sie das Datei-Passwort ein, " "um sie zu entsperren" #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Passwort" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" "Das von Ihnen eingegebene Passwort war nicht korrekt, bitte versuchen Sie es " "erneut." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Geben Sie ein Dateipasswort ein" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "Die Datei »%s« ist verschlüsselt. Bitte geben Sie das Datei-Passwort ein, um " "sie zu öffnen." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Geben Sie ein Passwort ein für Datei" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Bitte geben Sie ein Passwort für die Datei »%s« ein. Sie benötigen dieses " "Passwort, um die Datei später zu öffnen." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Die von Ihnen eingegeben Passwörter stimmen nicht überein." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Kein Passwort eingegeben" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Sie müssen ein Passwort für die neue Datendatei angeben." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Kontodaten" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notizen" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Der Name des Eintrags" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Name" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Eine Beschreibung des Eintrags" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Beschreibung" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Die Art des Eintrags" #: src/lib/dialog.py:859 msgid "Type" msgstr "Art" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notizen für den Eintrag" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Name nicht eingegeben" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Sie müssen einen Namen für das Konto eingeben" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Die %i gewählten Einträge wirklich entfernen?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Durch Entfernen dieser Einträge entfernen Sie automatisch alle enthaltenen " "Einträge." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Ordner »%s« wirklich entfernen?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Durch Entfernen dieses Ordners entfernen Sie alle Konten und Ordner, die " "dieser enthält." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Konto »%s« wirklich entfernen?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Bitte bestätigen Sie, dass Sie dieses Konto löschen möchten." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Der Name des Ordners" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Eine Beschreibung des Ordners" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Sie müssen einen Namen für den Ordner eingeben" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Ein Passwort-Manager für den GNOME Desktop" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Unbekannter Fehler" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Ein unbekannter Fehler ist aufgetreten. Bitte senden Sie den unten folgenden " "Text an die Revelation-Entwickler mit einer Beschreibung, was Sie getan " "haben, das möglicherweise den Fehler verursacht hat. Sie können versuchen, " "Revelation weiter zu verwenden, aber das Programm könnte vielleicht nicht " "mehr stabil laufen." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Passwort-Prüfer" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Geben Sie ein neues Passwort zur Prüfung ein" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Das Resultat der Prüfung" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Das Passwort scheint gut zu sein" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Das Passwort %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Passwort-Generator" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Das erzeugte Passwort" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Länge" #: src/lib/entry.py:170 msgid "Folder" msgstr "Ordner" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kreditkarte" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Schlüssel" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Datenbank" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Türschloss" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "E-Mail" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Allgemein" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Entfernter Desktop" #: src/lib/entry.py:355 msgid "Website" msgstr "Website" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kartennummer" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Die Nummer einer Kreditkarte, üblicherweise eine 16stellige Nummer" #: src/lib/entry.py:438 msgid "Card type" msgstr "Kartenart" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Die Art der Kreditkarte, wie MasterCard oder VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV Nummer" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Eine Kreditkarten-Prüfnummer, normalerweise ein dreistelliger Code auf der " "Rückseite einer Karte" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Zertifikat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Ein Zertifikat, wie beispielsweise ein X.509-SSL-Zertifikat" #: src/lib/entry.py:474 msgid "Code" msgstr "Code" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Ein Code, um Zugang zu etwas zu erhalten" #: src/lib/entry.py:487 msgid "A database name" msgstr "Ein Datenbank-Name" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domain" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Eine Internet- oder Anmeldedomain, wie organisation.org oder eine Windows-" "Anmeldedomain" #: src/lib/entry.py:511 msgid "An email address" msgstr "Eine E-Mail-Adresse" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Ablaufdatum" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Der Monat, an dem die Kreditkartengültigkeit abläuft" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Der Name eines Computers, wie computer.domain.com oder MEINCOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "Schlüsseldatei" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Eine Schlüsseldatei, die beispielsweise zur Authentifizierung bei ssh oder " "zum Verschlüsseln von X.509-Zertifikaten verwendet wird" #: src/lib/entry.py:558 msgid "Location" msgstr "Ort" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Ein physikalischer Ort, wie beispielsweise ein Büroeingang" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Eine geheime Wort- oder Zeichenkombination, um sicherzustellen, dass Sie " "Zugriff haben" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefonnummer" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Eine Telefonnummer" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Eine persönliche Identifikationsnummer, ein numerischer Code. der für " "Kreditkarten, Telefone usw. verwendet wird" #: src/lib/entry.py:606 msgid "Port number" msgstr "Portnummer" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Eine Netzwerk-Portnummer, um direkt auf Netzwerkdienste zuzugreifen" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Ein Uniform-Resource-Locator wie zum Beispiel eine Website-Adresse" #: src/lib/entry.py:630 msgid "Username" msgstr "Benutzername" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Ein Name oder andere Identifikation, um Sie selbst zu identifizieren" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Fortsetzen" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exportieren" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "Erzeu_gen" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importieren" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Eintrag hinzufügen" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Ordner hinzufügen" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Ändern" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Neu laden" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Ersetzen" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Entsperren" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Aktualisieren" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Verwerfen" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Sperren" #: src/lib/ui.py:114 msgid "Next" msgstr "Weiter" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Prüfen" #: src/lib/ui.py:119 msgid "Previous" msgstr "Vorheriger" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Unbekannt" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Passwort kopieren" #: src/lib/ui.py:628 msgid "Select File" msgstr "Datei auswählen" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Durchsuchen …" #: src/lib/ui.py:761 msgid "Generate" msgstr "Erzeugen" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notizen:" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Vor %s aktualisiert" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Zu suchender Text" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Beliebige Art" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Den vorherigen Treffer suchen" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Den nächsten Treffer suchen" #: src/lib/util.py:48 msgid "is too short" msgstr "ist zu kurz" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "ist nicht abwechslungsreich genug" #: src/lib/util.py:83 msgid "is too weak" msgstr "ist zu schwach" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "ist ein Palindrom" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i Sekunden" #: src/lib/util.py:348 msgid "years" msgstr "Jahre" #: src/lib/util.py:348 msgid "year" msgstr "Jahr" #: src/lib/util.py:356 msgid "months" msgstr "Monate" #: src/lib/util.py:356 msgid "month" msgstr "Monat" #: src/lib/util.py:360 msgid "weeks" msgstr "Wochen" #: src/lib/util.py:360 msgid "week" msgstr "Woche" #: src/lib/util.py:364 msgid "days" msgstr "Tage" #: src/lib/util.py:364 msgid "day" msgstr "Tag" #: src/lib/util.py:368 msgid "hours" msgstr "Stunden" #: src/lib/util.py:368 msgid "hour" msgstr "Stunde" #: src/lib/util.py:372 msgid "minute" msgstr "Minute" #: src/lib/util.py:376 msgid "seconds" msgstr "Sekunden" #: src/lib/util.py:376 msgid "second" msgstr "Sekunde" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation-Kontenliste" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Kontenliste" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Erstellt:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation Version:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Datei, die geöffnet werden soll, wenn Revelation gestartet wird" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Password-Manager" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Sicheres Verwalten Ihrer Passwörter" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Das Konto bei Doppelklick bearbeiten" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Datei beim Start öffnen:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Datei beim Start öffnen:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Datei sperren, wenn inaktiv für" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Automatisches Speichern bei Änderungen der Daten" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Automatisches Speichern der Datendatei, wenn ein Eintrag hinzugefügt, " "verändert oder entfernt wird" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Länge der erzeugten Passwörter" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" "Die Anzahl der Zeichen in erzeugten Passwörtern - 8 oder mehr sind empfohlen" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Sonderzeichen für Passwörter verwenden" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Sonderzeichen für Passwörter verwenden" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "New password" msgid "Show passwords" msgstr "Neues Passwort" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Werkzeugleisten-Stil" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Passwörter" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Neuen Ordner erstellen" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Eine Datei öffnen" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Geben Sie ein Passwort ein für Datei" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Aktuelles Passwort" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Neues Passwort" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Passwort-Generator" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Kein Passwort eingegeben" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Eintrag bearbeiten" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Passwort kopieren" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Datei auswählen" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Einträge ausschneiden" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "Go to the selected entries" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Zu den ausgewählten Einträgen gehen" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Kein Passwort eingegeben" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Zu suchender Text" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Den nächsten Treffer suchen" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Den vorherigen Treffer suchen" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Allgemein" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Kein Treffer gefunden" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "Die Zeichenkette »%s« trifft auf keinen Eintrag zu. Versuchen Sie, nach " #~ "einer anderen Phrase zu suchen." #~ msgid " Find:" #~ msgstr " Suchen:" #~ msgid "The type of account to search for" #~ msgstr "Die Art des Kontos, nach dem gesucht werden soll" revelation-revelation-0.5.5/po/es.po000066400000000000000000001523741423125252400174400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Mikel Olasagasti Uranga , 2011-2012 # Jordi Burguet-Castell , 2012 # Jordi Burguet-Castell , 2012 # Mikel Olasagasti Uranga , 2011 # Mikel Olasagasti Uranga , 2012,2020 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-10-04 13:05+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Spanish (http://www.transifex.com/hey_neken/revelation/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Faltan ficheros de datos" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Algunos ficheros de sistema de Revelation no han podido encontrarse, por favor vuelva a instalar Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Faltan datos de configuración" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation no pudo encontrar sus datos de configuración, por favor vuelva a instalar Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Ficheros de datos inválidos" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "Algunos de los ficheros de sistema de Revelation contienen datos inválidos, por favor vuelva a instalar Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Abrir" #: src/revelation.py:432 msgid "Open a file" msgstr "Abre un fichero" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Guardar" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Guarda los datos en un fichero" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Añadir entrada" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Crea una nueva entrada" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Añadir carpeta" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Crea una nueva carpeta" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Ir a" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Ir a las entradas seleccionadas\t" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Editar" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Edita la entrada seleccionada" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Eli_minar" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Elimina las entradas seleccionadas" #: src/revelation.py:610 msgid "New file" msgstr "Fichero nuevo" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Deshacer" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Deshacer %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Rehacer" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Rehacer %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Abrir cancelado" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "Coincidencia encontrada para “%s”" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "Ninguna coincidencia encontrada para “%s”" #: src/revelation.py:1108 msgid "Old file format" msgstr "Formato de fichero antiguo" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the " "file." msgstr "Revelation ha detectado que el fichero '%s' tiene un formato de fichero antiguo y actualmente no seguro. Es altamente recomendado guardar este fichero con el nuevo formato. Revelation guardará automaticamente el fichero pulsando guardar despues de abrir el fichero." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Contraseña incorrecta" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "La contraseña introducida para el fichero '%s' no es correcta." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Fallo al abrir" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Formato de fichero invalido" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "El fichero '%s' contiene datos invalidos." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Datos desconocidos" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "El fichero '%s' contiene datos desconocidos. Puede que se haya creado con una versión de Revelation más nueva." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Versión de datos desconocida" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "El fichero '%s' tiene una versión más nueva, por favor, actualiza Revelation para poder abrirla." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "No se ha podido detectar el tipo de fichero" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "El tipo de fichero de '%s' no pudo ser detectado automáticamente. Pruebe a especificar el tipo de fichero manualmente." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "No se ha podido abrir el fichero" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "El fichero '%s' no ha podido abrirse. Asegúrese de que el fichero existe, y de que tiene permisos para abrirlo." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "La entrada no tiene contraseñas para copiar" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Contraseña copiada al portapapeles" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Entradas copiadas" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Cortar entradas" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Entradas cortadas" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Pegar entradas" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Entradas pegadas" #: src/revelation.py:1261 msgid "Add entry" msgstr "Añadir entrada" #: src/revelation.py:1267 msgid "Entry added" msgstr "Entrada añadida" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Anulado añadir entrada" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Editar carpeta" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Editar entrada" #: src/revelation.py:1295 msgid "Update entry" msgstr "Actualizar entrada" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Entrada actualizada" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Anulado editar entrada" #: src/revelation.py:1330 msgid "Folder added" msgstr "Carpeta añadida" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Anulado añadir carpeta" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "No se ha encontrado el comando asociado a las entradas %s" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Entrada abierta" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Formato inválido de comando" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "El comando asociado para las entradas '%s' es inválido, por favor corríjalo en las preferencias." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Faltan datos en la entrada" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "La entrada '%s' no tiene todos los datos requeridos para abrirla." #: src/revelation.py:1397 msgid "Move entry" msgstr "Mover entrada" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Entradas movidas" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Eliminar entrada" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Entradas eliminadas" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Anulado el borrado de entrada" #: src/revelation.py:1455 msgid "Password changed" msgstr "Contraseña cambiada" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Cambio de contraseña cancelada" #: src/revelation.py:1472 #, python-format msgid "Closed file %s" msgstr "Fichero cerrado %s" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "Anulado cerrar fichero" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Datos exportados a %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Anulado exportar" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "No se pudo escribir en el fichero" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "El fichero '%s' no pudo abrirse para escritura. Asegúrese de que tiene los permisos para escribir en él." #: src/revelation.py:1503 msgid "Export failed" msgstr "La exportación ha fallado" #: src/revelation.py:1519 msgid "Import data" msgstr "Importar datos" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Datos importados desde %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Anulada la importación" #: src/revelation.py:1560 msgid "Locked" msgstr "Bloqueado" #: src/revelation.py:1561 msgid "File locked" msgstr "Fichero bloqueado" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Salir desactivado debido a cambios sin salvar" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Fichero desbloqueado" #: src/revelation.py:1609 msgid "New file created" msgstr "Nuevo fichero creado" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Anulado nuevo fichero" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Abierto fichero %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Datos salvados al fichero %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Guardado cancelado" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "No se pudo salvar el fichero" #: src/revelation.py:1666 msgid "Save failed" msgstr "Guardado fallido" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Anulado salir" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s rehecho" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s deshecho" #: src/revelation.py:1745 msgid "Preferences" msgstr "Preferencias" #: src/revelation.py:1754 msgid "General" msgstr "General" #: src/revelation.py:1758 msgid "Interface" msgstr "Interfaz" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Comandos" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Acción de doble click" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Ir a la cuenta, si es posible" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "Ir a la cuenta (abrir en una aplicación externa) al hacer doble click, si los datos requeridos se han rellenado" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Editar cuenta" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Editar cuenta con doble click" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Copiar contraseña al portapapeles" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia la contraseña de la cuenta al portapapeles al hacer doble click" #: src/revelation.py:1803 msgid "Files" msgstr "Ficheros" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Abrir fichero al inicio:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Cuando se activa, este fichero será abierto al arrancar el programa" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Seleccionar fichero para abrir automáticamente" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Ficheros Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Todos los ficheros" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Fichero a abrir cuando arranca Revelation" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Salvar datos automáticamente cuando cambian" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "Salvar el fichero de datos cuando se añade una entrada, se modifica o se elimina" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Bloquear el fichero cuando esté inactivo durante" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Bloquear automáticamente el fichero de datos después de un periodo de inactividad" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "El periodo de inactividad antes de bloquear el fichero, en minutos" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutos" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "Comandos asociados a las cuentas %s. Pueden usarse las siguientes variables de expansión:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: el símbolo \"%\"" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: variable de expansión opcional" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): subtexto de expansión opcional" #: src/revelation.py:1895 msgid "Passwords" msgstr "Contraseñas" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Muestra las contraseñas y otros secretos" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "Muestra las contraseñas y otros secretos como códigos PIN (de lo contrario, ocultar con *******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Copiar también el nombre de usuario al copiar la contraseña" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "Cuando la contraseña se copia al portapapeles, pon el nombre de usuario antes de la contraseña como una \"cadena\" del portapapeles" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Usar signos de puntuación en las contraseñas" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Cuando las contraseñas son generadas, usar caracteres de puntuación como %, =, { o ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "El número de caracteres que debe tener la contraseña generada - se recomiendan 8 o más" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Longitud de las contraseñas generadas" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Estilo de la barra de herramientas" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Usar el por defecto del escritorio" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Mostrar objetos de la barra de herramientas con el formato por defecto" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Mostrar iconos y texto" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Mostrar objetos de la barra de herramientas con ambos iconos y texto" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Mostrar iconos y texto importante" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Mostrar entradas de la barra de herramientas con texto al lado de iconos importantes" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Mostrar solo iconos" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Mostrar entradas de la barra de herramientas con solo iconos" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Mostrar solo texto" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Mostrar entradas de la barra de herramientas con solo texto" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "El fichero ha cambiado" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "El fichero actual '%s' ha cambiado. ¿Desea volver a cargarlo?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "¿Guardar cambios en el fichero actual?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "Ha realizado cambios que no han sido guardados. Si crea un nuevo fichero sin salvar entonces esos cambios se perderán." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "¿Salvar cambios antes de abrir?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "Ha realizado cambios que no han sido guardados. Si abre un fichero diferente sin salvar entonces esos cambios se perderán." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "¿Salvar cambios antes de salir?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving," " then these changes will be lost." msgstr "Ha realizado cambios que no han sido guardados. Si sale sin salvar entonces esos cambios se perderán." #: src/lib/dialog.py:349 msgid "Save changes before closing?" msgstr "¿Salvar cambios antes de cerrar?" #: src/lib/dialog.py:350 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "Ha realizado cambios que no han sido guardados. Si cierra el fichero sin salvar entonces esos cambios se perderán." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "¿Reemplazar el fichero existente?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "El fichero '%s' ya existe - ¿desea reemplazarlo?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "¿Guardar en fichero no seguro?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "Ha seleccionado guardar las contraseñas en un formato no seguro (no cifrado) - si alguien tiene acceso al fichero podrá ver todas las contraseñas." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Seleccione fichero al que exportar" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Tipo de fichero" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Seleccione fichero para importar" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Detectar automáticamente" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Seleccione fichero para abrir" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Seleccione fichero para guardar en" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Introduzca nueva contraseña" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "Introduzca una nueva contraseña para el fichero de datos actual. El fichero debe ser salvado antes de que la nueva contraseña se aplique." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Contraseña actual" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nueva contraseña" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Confirmar contraseña" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "La contraseña introducida para el fichero actual es incorrecto." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Las contraseñas no coinciden" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "La contraseña y la confirmación de contraseña introducida no concuerdan." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "¿Usar una contraseña insegura?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "La contraseña introducida no es segura; %s. ¿Está seguro de que quiere usarla?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Introduzca la contraseña para desbloquear el fichero" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "El fichero actual ha sido bloqueado, por favor introduzca la contraseña del fichero para desbloquearlo." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Contraseña" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "La contraseña introducida no es correcta, por favor, inténtelo de nuevo." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Introduzca la contraseña del fichero" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "El fichero '%s' está encriptado. Por favor introduzca la contraseña del fichero para abrirlo." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Introduzca contraseña para el fichero" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "Por favor introduzca una contraseña para el fichero '%s'. Necesitará esta contraseña para abrir el fichero más adelante." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Las contraseñas introducidas no coinciden" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "No se ha introducido una contraseña" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Debe introducir una contraseña para el nuevo fichero de datos." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Datos de la cuenta" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notas" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "El nombre de la entrada" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nombre" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Una descripción para la entrada" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Descripción" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Tipo de entrada" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tipo" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notas para la entrada" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "No se ha introducido nombre" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Debe introducir un nombre para la cuenta" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "¿Borrar realmente las %i entradas seleccionadas?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Al borrar estas entradas también borrará cualquier entrada que contengan." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "¿Borrar realmente la carpeta '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "Al borrar esta carpeta también borrará todas las cuentas y carpetas que contiene." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "¿Borrar realmente la cuenta '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Por favor confirme que desea borrar esta cuenta." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "El nombre de la carpeta" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Una descripción de la carpeta" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Debe introducir un nombre para esta carpeta" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Un gestor de contraseñas para el escritorio GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Error desconocido" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "Un error desconocido ha ocurrido. Por favor mande el texto que aparece abajo a los desarrolladores de Revelation, junto con una explicación de lo que estaba haciendo que pudo causar el error. Puede intentar seguir corriendo Revelation, pero podría comportarse no correctamente." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Comprobador de contraseñas" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Introduce una contraseña para comprobar" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "El resultado de la comprobación" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "La contraseña parece buena" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "La contraseña %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Generador de contraseñas" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "La contraseña generada" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Longitud" #: src/lib/entry.py:170 msgid "Folder" msgstr "Carpeta" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Tarjeta de crédito" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Llave cifrada" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Base de datos" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Cerradura" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Correo electrónico" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Genérico" #: src/lib/entry.py:306 msgid "Phone" msgstr "Teléfono" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Escritorio remoto" #: src/lib/entry.py:355 msgid "Website" msgstr "Sitio web" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Número de tarjeta" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "El número de una tarjeta de crédito, normalmente de 16 dígitos" #: src/lib/entry.py:438 msgid "Card type" msgstr "Tipo de tarjeta" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "El tipo de tarjeta de crédito, por ejemplo MasterCard o VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "\"Credit Card Verification number\", un número de verificación de tarjetas de crédito, normalmente un código de 3 dígitos que se encuentra en la parte trasera de una tarjeta" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificado" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificado, como el Certificado X.509 SSL" #: src/lib/entry.py:474 msgid "Code" msgstr "Código" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Un código usado para dar acceso a algo" #: src/lib/entry.py:487 msgid "A database name" msgstr "Nombre de la base de datos" #: src/lib/entry.py:498 msgid "Domain" msgstr "Dominio" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "Un nombre de dominio de Internet o local, como organization.org o un nombre de dominio Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Una dirección de correo electrónico" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Fecha de caducidad" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "El mes en el que caduca la tarjeta de crédito" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Nombre de host" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "El nombre de un ordenador, como ordenador.dominio.com o MIORDENADOR" #: src/lib/entry.py:546 msgid "Key File" msgstr "Fichero de claves" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "Un fichero de claves, usado para autentificación por ejemplo vía ssh o para encriptar certificados X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Lugar" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Un lugar físico, como la entrada de la oficina" #: src/lib/entry.py:571 msgid "" "A secret word or character combination used for proving you have access" msgstr "Una palabra secreta o combinación usada para probar que usted tiene acceso" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Número de teléfono" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Un número de teléfono" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "Un \"Personal Identification Number\", número de identificación personal, un código numérico usado para tarjetas de crédito, teléfonos, etc." #: src/lib/entry.py:606 msgid "Port number" msgstr "Número de puerto" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Un puerto de red, usado para acceder a servicios de red directamente" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Un \"Uniform Resource Locator\", localizador de recursos uniforme, tal como una dirección web" #: src/lib/entry.py:630 msgid "Username" msgstr "Nombre de usuario" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Un nombre u otra identificación usada para identificarse" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Continuar" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exportar" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Generar" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importar" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Añadir entrada" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Añadir carpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Cambiar" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Recargar" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Reemplazar" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Desbloquear" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Actualizar" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Descartar" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Bloquear" #: src/lib/ui.py:114 msgid "Next" msgstr "Siguiente" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Comprobar" #: src/lib/ui.py:119 msgid "Previous" msgstr "Anterior" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Desconocido" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Copiar contraseña" #: src/lib/ui.py:628 msgid "Select File" msgstr "Seleccionar fichero" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Explorar..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Generar" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notas: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Actualizado hace %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Texto a buscar" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Cualquier tipo" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Encontrar la coincidencia anterior" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Encontrar la coincidencia siguiente" #: src/lib/util.py:48 msgid "is too short" msgstr "es demasiado corta" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "no es lo suficientemente variado" #: src/lib/util.py:83 msgid "is too weak" msgstr "es demasiado débil" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "es un palíndromo" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i segundos" #: src/lib/util.py:348 msgid "years" msgstr "años" #: src/lib/util.py:348 msgid "year" msgstr "año" #: src/lib/util.py:356 msgid "months" msgstr "meses" #: src/lib/util.py:356 msgid "month" msgstr "mes" #: src/lib/util.py:360 msgid "weeks" msgstr "semanas" #: src/lib/util.py:360 msgid "week" msgstr "semana" #: src/lib/util.py:364 msgid "days" msgstr "días" #: src/lib/util.py:364 msgid "day" msgstr "día" #: src/lib/util.py:368 msgid "hours" msgstr "horas" #: src/lib/util.py:368 msgid "hour" msgstr "hora" #: src/lib/util.py:372 msgid "minute" msgstr "minuto" #: src/lib/util.py:376 msgid "seconds" msgstr "segundos" #: src/lib/util.py:376 msgid "second" msgstr "segundo" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Lista de cuentas de Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Lista de cuentas" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Creado:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Versión de Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "Gestor de contraseñas" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Entre otras funcionalidades Revelation es capaz de:" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "Guardar contraseñas de manera cifrada" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "Guardar contraseñas de manera organizada" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "Auto bloquearse cuando no se use la aplicación o se bloquee el escritorio" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "Importar y exportar desde o a distintos formatos de fichero" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "Una interfaz de usuario simple" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "Múltiples tipos de entrada para guardar contraseñas" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Buscar entradas con distintos criterios" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "Ventana de atajos de teclado" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "Ajustar la aplicación a sus necesidades" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "Ocultar el contenido cuando la aplicación no esté en uso" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Gestor de contraseñas" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Organiza y asegura tus contraseñas" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username" " is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the " "\"autolock_timeout\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 msgid "Length of passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:101 msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "" "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 msgid "Show passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off" " will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, " "\"both\" shows icons and text, \"both-horiz\" shows icons and important " "text, \"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 msgctxt "shortcut window" msgid "Password files" msgstr "Ficheros de contraseñas" #: data/ui/help-overlay.ui:17 msgctxt "shortcut window" msgid "Create a new password file" msgstr "Crear nuevo fichero de contraseñas" #: data/ui/help-overlay.ui:24 msgctxt "shortcut window" msgid "Open a password file" msgstr "Abrir fichero de contraseñas" #: data/ui/help-overlay.ui:31 msgctxt "shortcut window" msgid "Save a password file" msgstr "Guardar la contraseña" #: data/ui/help-overlay.ui:39 msgctxt "shortcut window" msgid "Close the current password file" msgstr "Cerrar fichero de contraseñas actual" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "Ventana" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "Bloquear acceso al contenido" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "Salir de la aplicación" #: data/ui/help-overlay.ui:66 msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Mostrar / Ocultar contraseñas" #: data/ui/help-overlay.ui:75 msgctxt "shortcut window" msgid "Password entries" msgstr "Entradas" #: data/ui/help-overlay.ui:79 msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Añadir nueva entrada de contraseña" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "Añadir nueva carpeta para entradas de contraseña" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "Edita la entrada seleccionada" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "Eliminar entrada seleccionada" #: data/ui/help-overlay.ui:108 msgctxt "shortcut window" msgid "Copy password" msgstr "Copiar contraseña" #: data/ui/help-overlay.ui:117 msgctxt "shortcut window" msgid "Selection" msgstr "Seleccionar" #: data/ui/help-overlay.ui:121 msgctxt "shortcut window" msgid "Select all entries" msgstr "Seleccionar todas las entradas" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Deseleccionar todas las entradas" #: data/ui/help-overlay.ui:137 msgctxt "shortcut window" msgid "Finding password entry" msgstr "Buscar una contraseña" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "Mostrar la barra de búsqueda" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Ocultar la barra de búsqueda" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "Buscar siguiente coincidencia" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "Buscar coincidencia anterior" #: data/ui/help-overlay.ui:171 msgctxt "shortcut window" msgid "General" msgstr "General" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "Atajos de teclado" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "Salir" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Fichero" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nuevo" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Guardar _como..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Cambiar _contraseña..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Cerrar" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Salir" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Cor_tar" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Copiar" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Copiar contras_eña" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Pegar" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Seleccionar todo" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Deseleccionar todo" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Buscar..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Buscar si_guiente" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Encontrar _anterior" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Prefere_ncias" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "E_ntrada" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Añadir entrada..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Añadir _carpeta..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Ver" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "Barra de _herramientas" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Barra de busqueda" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Barra de estado" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Generador de contraseñas" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "_Comprobador de contraseñas" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Mostrar _contraseñas" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Ayuda" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Acerca de" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "_Atajos de teclado" revelation-revelation-0.5.5/po/et.po000066400000000000000000001325511423125252400174340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Rivo Zängov , 2011-2012 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Estonian (http://www.transifex.com/hey_neken/revelation/" "language/et/)\n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Puuduvad andmefailid" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Puuduvad seadistuste andmed" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:92 msgid "Invalid data files" msgstr "Vigased andmefailid" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "Ava" #: src/revelation.py:432 msgid "Open a file" msgstr "Ava fail" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Salvesta" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Salvesta andmed faili" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Lisa sissekanne" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Loo uus sissekanne" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Lisa kaust" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Loo uus kaust" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Mine valitud sissekannetele" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "Muuda" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Muuda valitud sissekannet" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Eemalda" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "" #: src/revelation.py:610 msgid "New file" msgstr "Uus fail" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "Samm tagasi" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "Samm edasi" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Avamine on tühistatud" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Vale parool" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Avamine ebaõnnestus" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Vigane failivorming" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1124 msgid "Unknown data" msgstr "Tundmatud andmed" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Tundmatu andme versioon" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Failitüübi tuvastamine ebaõnnestus" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Faili avamine ebaõnnestus" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Sissekandel pole parooli, mida kopeerida" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Sissekanded on kopeeritud" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Lõika sissekanded" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Sissekanne on lõigatud" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Aseta sissekanded" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Sissekanded on asetatud" #: src/revelation.py:1261 msgid "Add entry" msgstr "Lisa sissekanne" #: src/revelation.py:1267 msgid "Entry added" msgstr "Sissekanne on lisatud" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Sissekande lisamine ebaõnnestus" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Muuda sissekannet" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Muuda sissekannet" #: src/revelation.py:1295 msgid "Update entry" msgstr "Uuenda sissekannet" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Sissekanne on uuendatud" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Sissekande muutmine on tühistatud" #: src/revelation.py:1330 msgid "Folder added" msgstr "Kaust on lisatud" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Kausta lisamine on tühistatud" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Sissekanne on avatud" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "Liiguta sissekannet" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Sissekanded on liigutatud" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Eemalda sissekanne" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Sissekanded on eemaldatud" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Sissekande eemaldamine tühistati" #: src/revelation.py:1455 msgid "Password changed" msgstr "Parool on tühistatud" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Parooli muutmine tühistati" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Data saved to file %s" msgid "Closed file %s" msgstr "Andmed salvestatud faili %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Uue faili loomine on tühistatud" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Eksportimine on tühistatud" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "" #: src/revelation.py:1519 msgid "Import data" msgstr "Impordi andmed" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Importimine on tühistatud" #: src/revelation.py:1560 msgid "Locked" msgstr "Lukustatud" #: src/revelation.py:1561 msgid "File locked" msgstr "Fail on lukustatud" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Fail on avatud" #: src/revelation.py:1609 msgid "New file created" msgstr "Uus fail on loodud" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Uue faili loomine on tühistatud" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Andmed salvestatud faili %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Salvestamine on tühistatud" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "" #: src/revelation.py:1666 msgid "Save failed" msgstr "Salvestamine ebaõnnestus" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Väljumine on tühistatud" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "Eelistused" #: src/revelation.py:1754 msgid "General" msgstr "Üldine" #: src/revelation.py:1758 msgid "Interface" msgstr "Kasutajaliides" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Kui võimalik, siis mine kontole" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Muuda kontot" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: src/revelation.py:1803 msgid "Files" msgstr "Failid" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Ava käivitades fail:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelationi failid" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Kõik failid" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutit" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "Parool" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Tööriistariba stiil" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Kasuta töölaua vaikeväärtust" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Näita ainult ikoone" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Näita tööriistaribal ainult kirjete ikoone" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Näita ainult teksti" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Autoriõigused" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Faili on muudetud" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Salvestada muudatused praeguses failis?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Salvestada muudatused enne lõpetamist?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before quitting?" msgid "Save changes before closing?" msgstr "Salvestada muudatused enne lõpetamist?" #: src/lib/dialog.py:350 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Asendada olemasolev fail?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Salvestada ebaturvalisse faili?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Failitüüp" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Vali fail, mida importida" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Tuvasta automaatselt" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Vali fail, mida avada" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Sisesta uus parool" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" #: src/lib/dialog.py:641 msgid "Current password" msgstr "Praegune parool" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Uus parool" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Kinnita parooli" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Paroolid ei kattu" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Kasutada ebaturvalist parooli?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Sisesta faili avamiseks parool" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Parool" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Sisesta faili parool" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Sisesta faili jaoks parool" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Sinu poolt sisestatud paroolid ei kattu." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Parooli pole sisestatud" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "" #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Konto andmed" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Märkused" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Sissekande nimi" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nimi" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Sissekande kirjeldus" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Kirjeldus" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Sissekande tüüp" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tüüp" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Sissekande märkused" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nime pole sisestatud" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Sa pead sisestama konto jaoks nime" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Kas tõepoolest eemaldada %i valitud kirjet?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Kas tõesti eemaldada kaust '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Kausta nimi" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Kausta kirjeldus" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Sa pead sisestama kausta nime" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "GNOME töölaua paroolihaldur" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Tundmatu tõrge" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Parooli kontrollija" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Sisesta parool, mida kontrollida" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Tulemus, mida kontrollida" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Parool näib olevat hea" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Parool %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Parooli looja" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Loodud parool" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Pikkus" #: src/lib/entry.py:170 msgid "Folder" msgstr "Kaust" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Krediitkaart" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Krüpto võti" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Andmebaas" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Ukselukk" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "E-post" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Üldine" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Kaugtöölaud" #: src/lib/entry.py:355 msgid "Website" msgstr "Veebisait" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kaardi number" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "" #: src/lib/entry.py:438 msgid "Card type" msgstr "Kaardi tüüp" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV number" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Sertifikaat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "" #: src/lib/entry.py:474 msgid "Code" msgstr "Kood" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:487 msgid "A database name" msgstr "Andmebaasi nimi" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domeen" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:511 msgid "An email address" msgstr "E-posti aadress" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Aegumise kuupäev" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Hostinimi" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" #: src/lib/entry.py:546 msgid "Key File" msgstr "Võtmefail" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:558 msgid "Location" msgstr "Asukoht" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefoni number" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Telefoni number" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:606 msgid "Port number" msgstr "Pordi number" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" #: src/lib/entry.py:630 msgid "Username" msgstr "Kasutajanimi" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "Jätka" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Ekspordi" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "Loo" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Impordi" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "Lis_a sissekanne" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "Lis_a kaust" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "Muuda" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "Lae uuesti" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "Asenda" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "Ava" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Uuenda" #: src/lib/ui.py:104 msgid "_Discard" msgstr "" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Lukusta" #: src/lib/ui.py:114 msgid "Next" msgstr "Järgmine" #: src/lib/ui.py:116 msgid "_Check" msgstr "Kontrolli" #: src/lib/ui.py:119 msgid "Previous" msgstr "Eelmine" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Tundmatu" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Kopeeri parool" #: src/lib/ui.py:628 msgid "Select File" msgstr "Vali fail" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Sirvi..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Loo" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Märkused: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Uuendatud %s tagasi" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "" #: src/lib/ui.py:1597 msgid "Any type" msgstr "" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "" #: src/lib/util.py:48 msgid "is too short" msgstr "on liiga lühike" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:83 msgid "is too weak" msgstr "on liiga nõrk" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekundit" #: src/lib/util.py:348 msgid "years" msgstr "aastat" #: src/lib/util.py:348 msgid "year" msgstr "aasta" #: src/lib/util.py:356 msgid "months" msgstr "kuud" #: src/lib/util.py:356 msgid "month" msgstr "kuu" #: src/lib/util.py:360 msgid "weeks" msgstr "nädalat" #: src/lib/util.py:360 msgid "week" msgstr "nädal" #: src/lib/util.py:364 msgid "days" msgstr "päeva" #: src/lib/util.py:364 msgid "day" msgstr "päev" #: src/lib/util.py:368 msgid "hours" msgstr "tundi" #: src/lib/util.py:368 msgid "hour" msgstr "tund" #: src/lib/util.py:372 msgid "minute" msgstr "minut" #: src/lib/util.py:376 msgid "seconds" msgstr "sekundit" #: src/lib/util.py:376 msgid "second" msgstr "sekund" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation kontode nimekiri" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Kontode nimekiri" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Loodud:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelationi versioon:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Paroolide haldaja" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Ava käivitades fail:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Ava käivitades fail:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Current password" msgid "Length of passwords" msgstr "Praegune parool" #: data/info.olasagasti.revelation.gschema.xml:101 msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Näita paroole" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Tööriistariba stiil" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Parool" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Loo uus kaust" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Ava fail" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Sisesta faili jaoks parool" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Praegune parool" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Uus parool" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Parooli looja" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Parooli pole sisestatud" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Muuda sissekannet" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Kopeeri parool" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Vali fail" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Lõika sissekanded" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "Go to the selected entries" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Mine valitud sissekannetele" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Parooli pole sisestatud" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find Pre_vious" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Leia eelmine" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Üldine" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "Välju" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Fail" #: data/ui/menubar.ui:8 msgid "_New" msgstr "Uus" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "S_alvesta kui..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Muuda _parooli..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "Sulge" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "Välju" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Lõika" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "Kopeeri" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Kopeeri parool" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "Aseta" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "Vali kõik" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "Leia..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Leia järgmine" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Leia eelmine" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Eelistused" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "Sisseka_nne" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "Lis_a sissekanne..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Lisa kaust..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Vaata" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "Peamine tööriistariba" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "Olekuriba" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Parooli kontrollija" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Näita paroole" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "Abiinfo" #: data/ui/menubar.ui:263 msgid "_About" msgstr "R_akendusest" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid " Find:" #~ msgstr " Leia:" revelation-revelation-0.5.5/po/eu.po000066400000000000000000001500201423125252400174240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Mikel Olasagasti Uranga , 2011 # Mikel Olasagasti Uranga , 2012,2020 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-10-04 12:55+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Basque (http://www.transifex.com/hey_neken/revelation/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Datu fitxategiak falta dira" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Ezin izan dira Revelation-en zenbait fitxategi aurkitu, instalatu Revelation berriz." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Konfigurazio datuak falta dira" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation-ek ezin izan du bere konfigurazio fitxategiak aurkitu, instalatu Revelation berriz." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Baliogabeko datu fitxategiak" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "Revelation-en zenbait fitxategik baliogabeko datuak dituzte, instalatu Revelation berriz." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Ireki" #: src/revelation.py:432 msgid "Open a file" msgstr "Ireki fitxategi bat" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Gorde" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Gorde datuak fitxategi batera" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Gehitu sarrera" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Sarrera berri bat sortu" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Gehitu karpeta" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Karpetaren berri bat sortu" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "J_oan" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Joan aukeratutako sarreretara" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Editatu" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Editatu hautatutako sarerra" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "_Kendu" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Ezabatu hautatutako sarrerak" #: src/revelation.py:610 msgid "New file" msgstr "Fitxategi berria" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Desegin" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Desegin %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Berregin" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Berregin %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Irekitzea bertan behera utzi da" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "Parekatzea aurkitu da “%s”-(r)entzat" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "Ez da parekatzerik aurkitu “%s”-(r)entzat" #: src/revelation.py:1108 msgid "Old file format" msgstr "Fitxategi formatu zaharra" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the " "file." msgstr "Revelation-ek '%s' fitxategiak formatu zaharra eta gaur egun segurua ez dena duela atzeman du eta. Fitxategi hau formatu berriarekin gordetzea aholkatzen da. Revelation-ek automatikoki egingo du fitxategia ireki ondoren gordetzen bada." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Pasahitz okerra" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Sartu duzun uneko '%s' fitxategiaren pasahitza ez da zuzena." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Irekitzeak huts egin du" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Formatu baliogabea" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "'%s' fitxategiak baliogabeko datuak ditu." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Datu ezezagunak" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "'%s' fitxategiak datu ezezagunak ditu. Agian Revelation-en bertsio berriago batekin sortua izan da." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Datu bertsio ezezaguna" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "'%s' fitxategiak bertsio datu aurreratuago bat du, eguneratu Revelation ireki ahal izateko." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Ezin da fitxategi mota atzeman" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "'%s' fitxategiaren mota ezin izan da automatikoki atzeman. Saiatu eskuz zehazten." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Ezin da fitxategia ireki" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "Ezin izan da '%s' fitxategia ireki. Ziurtatu fitxategia existitzen dela eta irekitzeko baimenak dituzula." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Sarrerak ez du pasahitzik kopiatzeko" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Pasahitzak arbelera kopiatuta" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Sarrerak kopiatuta" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Sarrerak moztu" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Sarrerak moztuta" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Sarrerak itsatsi" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Sarrerak itsatsi dira" #: src/revelation.py:1261 msgid "Add entry" msgstr "Gehitu sarrera" #: src/revelation.py:1267 msgid "Entry added" msgstr "Sarrera gehituta" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Sarrera gehitzea ezeztatua" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Editatu karpeta" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Editatu sarrera" #: src/revelation.py:1295 msgid "Update entry" msgstr "Eguneratu sarrera" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Sarrera eguneratuta" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Sarrera gehitzea ezeztatua" #: src/revelation.py:1330 msgid "Folder added" msgstr "Karpeta gehituta" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Karpeta gehitzea ezeztatua" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Ez da joan komandorik aurkitu %s sarrerentzat" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Sarrera irekita" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Baliogabeko joan komando formatua" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "'%s' sarrerarentzat joan komandoa baliogabea da, konpondu hobespenetan." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Sarrera datuak falta dira" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "'%s' sarrerak ez ditu behar diren datu guztiak ireki ahal izateko." #: src/revelation.py:1397 msgid "Move entry" msgstr "Mugitu sarrera" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Sarrerak mugituta" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Kendu sarrera" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Sarrerak kenduta" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Sarrera kentzea ezeztatuta" #: src/revelation.py:1455 msgid "Password changed" msgstr "Pasahitza aldatu da" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Pasahitz aldatzea ezeztatuta" #: src/revelation.py:1472 #, python-format msgid "Closed file %s" msgstr "%s fitxategia itxi da" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "Fitxategia ixtea ezeztatua" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Datuak %s-(r)a esportatu dira" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Esportazioa ezatatuta" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Ezin da fitxategian idatzi" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "Ezin izan da '%s' fitxategia ireki idazketarako. Ziurtatu baimenak dituzula bertan idazteko." #: src/revelation.py:1503 msgid "Export failed" msgstr "Esportazioak huts egin du" #: src/revelation.py:1519 msgid "Import data" msgstr "Inportatu datuak" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Datuak %s-(t)ik inportatu dira" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Inportazioa ezeztatuta" #: src/revelation.py:1560 msgid "Locked" msgstr "Blokeatuta" #: src/revelation.py:1561 msgid "File locked" msgstr "Fitxategia blokeatuta" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Irtetzea ezgaitua gorde gabeko aldaketengatik" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Fitxategia desblokeatuta" #: src/revelation.py:1609 msgid "New file created" msgstr "Fitxategi berria sortuta" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Fitxategi berria sortzea ezeztatuta" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "%s fitxategia ireki da" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Datuak %s fitxategian gorde dira" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Gordetzea ezeztatuta" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Ezin da fitxategian gorde" #: src/revelation.py:1666 msgid "Save failed" msgstr "Gordetzeak huts egin du" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Irtetea ezeztatuta" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s berreginda" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s deseginda" #: src/revelation.py:1745 msgid "Preferences" msgstr "Hobespenak" #: src/revelation.py:1754 msgid "General" msgstr "Orokorra" #: src/revelation.py:1758 msgid "Interface" msgstr "Interfazea" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Joan komandoak" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Klik bikoitzaren ekintza" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Joan kontura, posible bada" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "Joan kontura (ireki kanpoko aplikazioa) klik bikoitzean, daturen bat behar bada bete" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Editatu kontua" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Editatu kontua klik bikoitzean" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Kopiatu pasahitza arbelera" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiatu kontuaren pasahitza arbelera klik bikoitzean" #: src/revelation.py:1803 msgid "Files" msgstr "Fitxategiak" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Ireki fitxategia abiaraztean" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Gaituta dagoenean fitxategi hau irekiko da aplikazioa abiaraztean" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Aukeratu fitxategia automatikoki ireki dadin" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation fitxategiak" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Fitxategi guztiak" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Revelation abiarazten denean ireki beharreko fitxategia" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Automatikoki gorde datuak aldaketaren bat dagoenean" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "Automatikoki gorde datuak fitxategian sarrera bat gehitu, aldatu edo ezabatzean" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Ekintzarik gabe egon ostean zenbat minutura blokeatu fitxategia" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatikoki blokeatu fitxategia denbora batez aktibitaterik ez denean" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Aktibitaterik gabeko denbora tartea minututan" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutu" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "%s kontuentzat joan komandoa. Honako aldagai luzagarriak erabili daitezke:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: \"%\" sinboloa" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: aukerazko aldagai luzagarria " #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): aukerazko substring luzagarria" #: src/revelation.py:1895 msgid "Passwords" msgstr "Pasahitzak" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Bistaratu pasahitzak eta beste zenbait sekretu" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "Erakutsi pasahitzak eta beste zenbait sekretu, PIN kodeak adibidez (bestela ezkutatu ****-rekin)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Kopiatu erabiltzaile izena ere pasahitzak kopiatzean" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "Pasahitza arbelera kopiatzean ezarri erabiltzaile izena pasahitzaren aurretik arbelean" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Erabili puntuazio karaktereak pasahitzentzat" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Pasahitzak sortzerakoan erabili puntuazio karaktereak %, =, { edo . bezala." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Sortutako pasahitzen karaktere kopurua - 8 edo gehiago aholkatzen da" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Sortutako pasahitzen luzeera" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Tresna barraren estiloa" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Erabili mahai-gaineko lehenetsia" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Erakutsi tresna barrako elementuak lehenetsitako estiloarekin" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Erakutsi ikonoak eta testuak" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Erakutsi tresna barrako elementuak ikono eta testuarekin" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Erakutsi ikonoak eta testu garrantzitsuak" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Erakutsi tresna-barrako elementuak testuarekin eta ikono garrantzitsuen ondoan" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Erakutsi ikonoak soilik" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Erakutsi tresna-barrako elementuak ikonoekin soilik" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Erakutsi testua soilik" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Erakutsi tresna-barrako elementuak testuarekin soilik" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Fitxategia aldatu da" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Uneko '%s' fitxategia aldatu egin da. Birkargatu nahi?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Gorde aldaketak uneko fitxategian?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "Zenbait aldaketa ez dira gorde. Fitxategi berri bat sortzen baduzu aurrekoa gorde gabe aldaketa hauek galdu egin dira." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Gorde aldaketak ireki aurretik?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "Zenbait aldaketa ez dira gorde. Fitxategi ezberdin bat irekitzen baduzu aurrekoa gorde gabe aldaketa hauek galdu egin dira." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Gorde aldaketak irten aurretik?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving," " then these changes will be lost." msgstr "Zenbait aldaketa gorde gabe daude. Gorde gabe irteten bazara galdu egingo dira." #: src/lib/dialog.py:349 msgid "Save changes before closing?" msgstr "Gorde aldaketak itxi aurretik?" #: src/lib/dialog.py:350 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "Zenbait aldaketa gorde gabe daude. Gorde aurretik itxiz gero aldaketak galduko dira." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Ordeztu lehenedik existitzen den fitxategia?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "'%s' fitxategia existitzen da dagoeneko, ordezkatu nahi duzu?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Gorde fitxategi ez seguruan?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "Zure pasahitzak segurua ez den fitxategi formatu batean gordetzea aukeratu duzu (ez zifratua). Norbaitek fitxategi hontara sarrera izango balu pasahitz guztiak ikusteko aukera izango du." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Aukeratu esportatu beharreko fitxategia" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Fitxategi mota" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Aukeratu inportatu beharreko fitxategia" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Atzeman automatikoki" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Aukeratu fitxategi bat irekitzeko" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Aukeratu gordetzeko fitxategia" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Sartu pasahitz berria" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "Sartu pasahitz berria fitxategiarentzat. Fitxategia gorde egin behar da pasahitz berria aplikatu aurretik." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Uneko pasahitza" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Pasahitz berria" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Baieztatu pasahitza" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Sartu duzun uneko fitxategiaren pasahitza ez da zuzena." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Pasahitzak ez datoz bat" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Sartu duzun pasahitza eta pasahitzaren baieztapena ez datoz bat." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Pasahitz ez segurua erabili?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "Sartu duzun pasahitza ez da segurua; %s. Ziur zaude erabili nahi duzula?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Sartu pasahitza fitxategia desblokeatzeko" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Uneko fitxategia blokeatu egin da, sartu pasahitza desblokeatzeko." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Pasahitza" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Sartu duzun pasahitza ez da zuzena, saiatu berriz." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Sartu fitxategiaren pasahitza" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "'%s' fitxategia zifratuta dagu. Sartu pasahitza fitxategia irekitzeko." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Sartu pasahitza fitxategiarentzat" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "Sartu pasahitza '%s' fitxategiarentzat. Pasahitz hau beharko da aurrerago fitxategia ireki ahal izateko." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Sartu dituzun pasahitzak ez dagoz bat." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Ez da pasahitzik sartu" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Pasahitz bat sartu behar duzu fitxategi berriarentzat." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Kontuaren datuak" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Oharrak" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Sarreraren izena" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Izena" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Sarreraren deskribapena" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Deskribapena" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Sarrera moeta" #: src/lib/dialog.py:859 msgid "Type" msgstr "Moeta" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Sarreraren oharrak" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Ez da izenik sartu" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Kontuarentzat izen bat sartu behar duzu" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Aukeratutako %i sarrerak ezabatu nahi dituzu?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Sarrera hauek ezabatuta hauek dituzten beste sarrerak ezabatuko dira." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "'%s' karpeta ezabatu?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "Karpeta hau ezabatzean barruan dauden kontu eta karpeta guztiak ezabatuko dira." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "'%s' kontua ezabatu?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Konfiruamtu kontu hau ezabatu nahi duzula." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Karpetaren izena" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Karpetaren deskribapena" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Karpetarentzat izen bat sartu behar da" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "GNOME mahaigainerako pasahitz kudeatzailea" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Errore ezezaguna" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "Errore ezezagun bat gertatu da. Bidali azpiko testua Revelation aplikazioaren garatzaileei eta honekin batera azalpen txiki bat errore hontara zerk eraman zaituen jakiteko. Revelation erabiltzen jarraitu dezakezu baina ezin da bere funtzionalite egokia ziurtatu." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Pasahitz egiaztatzailea" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Aukeratu pasahitz bat egiaztatzeko" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Egiaztatzearen emaitza" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Pasahitzak ona dirudi" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "%s pasahitza" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Pasahitz sortzailea" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Sortutako pasahitza" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Luzeera" #: src/lib/entry.py:170 msgid "Folder" msgstr "Karpeta" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kreditu txartela" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Kripto-giltza" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Datubasea" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Sarraila" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Posta elektronikoa" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Orokorra" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefonoa" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Urruneko mahaigaina" #: src/lib/entry.py:355 msgid "Website" msgstr "Webgunea" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Txartel zenbakia" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Kreditu txartelaren zenbakia, normalean 16 digitoduna" #: src/lib/entry.py:438 msgid "Card type" msgstr "Txartel moeta" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Txartel moeta, MasterCard edo VISA adibidez" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV zenbakia" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "Kreditu txartelaren baieztapen zenbakia, normalean 3 digitoduna eta txartelaren atzekaldean dagoena" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Zertifikatua" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Zertifikatu bat, X.509 SSL zertifikatu bat adibidez" #: src/lib/entry.py:474 msgid "Code" msgstr "Kodea" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Nonbaitera sarrera ematen duen kodea" #: src/lib/entry.py:487 msgid "A database name" msgstr "Datubase izena" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domeinua" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "Internet edo saio hasierako domeinua, adibidez erakundea.org edo Windows-eko domeinu bat" #: src/lib/entry.py:511 msgid "An email address" msgstr "Posta elektroniko helbide bat" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Iraungitze data" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Kreditu txartelaren iraungitze hilabetea" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Ostalari izena" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Ordenagailuaren izena, adibidez ordenagailua.domeinua.com edo NIREORDENAGAILUA" #: src/lib/entry.py:546 msgid "Key File" msgstr "Gako fitxategia" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "Gako fitxategi bat, SSH autentikaziorako edo X.509 zertifikatuak zifratzeko" #: src/lib/entry.py:558 msgid "Location" msgstr "Kokapena" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Kokapen fisikoa, bulego sarrera adibidez" #: src/lib/entry.py:571 msgid "" "A secret word or character combination used for proving you have access" msgstr "Sarrera izateko behar den pasahitz ezkutua edo karaktere konbinazioa bat" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefono zenbakia" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Telefono zenbaki bat" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "Telefono mugikor, kreditu txartel eta beste zenbaitetan erabiltzen den kode numerikoa" #: src/lib/entry.py:606 msgid "Port number" msgstr "Ataka zenbakia" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Sareko ataka bat, sareko zerbitzuetara zuzenean sartzeko" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL bat, webgune baten helbidea adibidez" #: src/lib/entry.py:630 msgid "Username" msgstr "Erabiltzaile izena" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Izen bat edo beste edozein identifikazio zu zeu identifikatzeko" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "Ja_rraitu" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exportatu" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Sortu" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "I_nportatu" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Gehitu sarrera" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Gehitu karpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Aldatu" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Berritu" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Ordeztu" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Desblokeatu" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Eguneratu" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Baztertu" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Blokeatu" #: src/lib/ui.py:114 msgid "Next" msgstr "Hurrengoa" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Egiaztatu" #: src/lib/ui.py:119 msgid "Previous" msgstr "Aurrekoa" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Ezezaguna" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Kopiatu pasahitza" #: src/lib/ui.py:628 msgid "Select File" msgstr "Aukeratu fitxategia" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Arakatu..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Sortu" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Oharrak: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Orain %s eguneratua" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Bilatu beharreko testua" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Edozen moeta" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Bilatu aurreko parekatzea" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Bilatu hurrengoa parekatzea" #: src/lib/util.py:48 msgid "is too short" msgstr "Motzegia da" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "Ez du aldakortasun nahikoa" #: src/lib/util.py:83 msgid "is too weak" msgstr "Ahulegia da" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "Palindromoa da" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i segundu" #: src/lib/util.py:348 msgid "years" msgstr "urte" #: src/lib/util.py:348 msgid "year" msgstr "urte" #: src/lib/util.py:356 msgid "months" msgstr "hilabete" #: src/lib/util.py:356 msgid "month" msgstr "hilabete" #: src/lib/util.py:360 msgid "weeks" msgstr "aste" #: src/lib/util.py:360 msgid "week" msgstr "aste" #: src/lib/util.py:364 msgid "days" msgstr "egun" #: src/lib/util.py:364 msgid "day" msgstr "egun" #: src/lib/util.py:368 msgid "hours" msgstr "ordu" #: src/lib/util.py:368 msgid "hour" msgstr "ordu" #: src/lib/util.py:372 msgid "minute" msgstr "minutu" #: src/lib/util.py:376 msgid "seconds" msgstr "segundu" #: src/lib/util.py:376 msgid "second" msgstr "segundu" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation kontu zerrenda" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Kontu zerrenda" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Sortze data:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation bertsioa:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "Pasahitz kudeatzailea" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "Revelation GNOME mahaigainerako pasahitz kudeatzailea da, GNU GPL lizentziapean argitaratua. Zure kontu eta pasahitz guztiak gordetzen ditu toki bakar eta seguruan, eta modu grafiko errazean ematen dizu sarrera." #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Besteak beste, Revelation-ek ondorengoak egin ditzake:" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "Pasahitzak zifratuta gorde" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "Pasahitzak antolatuta gorde" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "Fitxategia itxi sistema denbora batez ez denean erabiltzen edo pantaila babeslea abiaraztean" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "Esportatu datuak fitxategi formatu ezberdin batera" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "Erabiltzaile-interfaze erraza" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "Hainbat sarrera moeta pasahitzak gordetzeko" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Bilatu sarrerak hainbat irizpideren arabera" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "Laster-tekla leihoa" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "Egokitu aplikazioa zure beharretara" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "Ezkutatu edukia aplikazioa denbora batez erabiltzen ez denean" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Pasahitz kudeatzailea" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Antolatu eta babestu zure pasahitzak" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username" " is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the " "\"autolock_timeout\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 msgid "Length of passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:101 msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "" "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 msgid "Show passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off" " will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, " "\"both\" shows icons and text, \"both-horiz\" shows icons and important " "text, \"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 msgctxt "shortcut window" msgid "Password files" msgstr "Pasahitz fitxategiak" #: data/ui/help-overlay.ui:17 msgctxt "shortcut window" msgid "Create a new password file" msgstr "Sortu pasahitz fitxategi berri bat" #: data/ui/help-overlay.ui:24 msgctxt "shortcut window" msgid "Open a password file" msgstr "Ireki pasahitz fitxategi bat" #: data/ui/help-overlay.ui:31 msgctxt "shortcut window" msgid "Save a password file" msgstr "Gorde pasahitz fitxategi bat" #: data/ui/help-overlay.ui:39 msgctxt "shortcut window" msgid "Close the current password file" msgstr "Itxi uneko pasahitz fitxategia" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "Leihoa" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "Giltzatu sarrera edukira" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "Irten aplikaziotik" #: data/ui/help-overlay.ui:66 msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Erakutsi/ezkutatu pasahitzak" #: data/ui/help-overlay.ui:75 msgctxt "shortcut window" msgid "Password entries" msgstr "Pasahitz sarrerak" #: data/ui/help-overlay.ui:79 msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Gehitu pasahitz sarrera berri bat" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "Gehitu karpeta berri bat pasahitza sarrerentzat" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "Editatu uneko sarrera" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "Ezabatu uneko sarrera" #: data/ui/help-overlay.ui:108 msgctxt "shortcut window" msgid "Copy password" msgstr "Kopiatu pasahitza" #: data/ui/help-overlay.ui:117 msgctxt "shortcut window" msgid "Selection" msgstr "Hautaketa" #: data/ui/help-overlay.ui:121 msgctxt "shortcut window" msgid "Select all entries" msgstr "Hautatu sarrera guztiak" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Desautatu sarrera guztiak" #: data/ui/help-overlay.ui:137 msgctxt "shortcut window" msgid "Finding password entry" msgstr "Pasahitz sarrera bilaketa" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "Erakutsi bilaketa barra" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Ezkutatu bilaketa barra" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "Bilatu hurrengo parekatzea" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "Bilatu aurreko parekatzea" #: data/ui/help-overlay.ui:171 msgctxt "shortcut window" msgid "General" msgstr "Orokorra" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "Laster teklak" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "Irten" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Fitxategia" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Berria" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Gorde _honela..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Aldatu _pasahitza..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Itxi" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Irten" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Moz_tu" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Kopiatu" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "_Kopiatu pasahitzak" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Itsatsi" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Hautatu guztiak" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Desautatu guztiak" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Bilatu..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Bilatu _hurrengoa" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Bilatu _aurrekoa" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Ho_bespenak" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "S_arrera" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Gehitu sarrera..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "_Gehitu karpeta..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "I_kusi" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Tresnabarra nagusia" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "_Bilaketa barra" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Egoera barra" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "Pasahitz _sortzailea" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Pasahitz _egiaztatzailea" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Erakutsi _pasahitzak" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Laguntza" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Honi buruz" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "_Laster teklak" revelation-revelation-0.5.5/po/fi.po000066400000000000000000001346311423125252400174230ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Finnish (http://www.transifex.com/hey_neken/revelation/" "language/fi/)\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:92 msgid "Invalid data files" msgstr "" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "" #: src/revelation.py:432 msgid "Open a file" msgstr "" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "" #: src/revelation.py:438 msgid "Save data to a file" msgstr "" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "" #: src/revelation.py:447 msgid "Create a new entry" msgstr "" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "" #: src/revelation.py:454 msgid "Create a new folder" msgstr "" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Siirry" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Muokkaa" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "_Poista" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "" #: src/revelation.py:610 msgid "New file" msgstr "" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Väärä salasana" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1124 msgid "Unknown data" msgstr "" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1195 msgid "Entries copied" msgstr "" #: src/revelation.py:1217 msgid "Cut entries" msgstr "" #: src/revelation.py:1224 msgid "Entries cut" msgstr "" #: src/revelation.py:1239 msgid "Paste entries" msgstr "" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "" #: src/revelation.py:1261 msgid "Add entry" msgstr "" #: src/revelation.py:1267 msgid "Entry added" msgstr "" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "" #: src/revelation.py:1295 msgid "Update entry" msgstr "" #: src/revelation.py:1300 msgid "Entry updated" msgstr "" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1330 msgid "Folder added" msgstr "" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "" #: src/revelation.py:1405 msgid "Entries moved" msgstr "" #: src/revelation.py:1432 msgid "Remove entry" msgstr "" #: src/revelation.py:1438 msgid "Entries removed" msgstr "" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "All files" msgid "Closed file %s" msgstr "Kaikki tiedostot" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "" #: src/revelation.py:1519 msgid "Import data" msgstr "" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "" #: src/revelation.py:1560 msgid "Locked" msgstr "" #: src/revelation.py:1561 msgid "File locked" msgstr "" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1586 msgid "File unlocked" msgstr "" #: src/revelation.py:1609 msgid "New file created" msgstr "" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "" #: src/revelation.py:1666 msgid "Save failed" msgstr "" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "" #: src/revelation.py:1754 msgid "General" msgstr "" #: src/revelation.py:1758 msgid "Interface" msgstr "" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: src/revelation.py:1803 msgid "Files" msgstr "" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelationin salasanat" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Kaikki tiedostot" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minuuttia" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Tekijänoikeudet" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Tiedosto on muuttunut" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Tiedosto \"%s\" on muuttunut. Haluatko ladata sen uudestaan?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Tallennetaanko muutokset nykyiseen tiedostoon?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Olet tehnyt tallentamattomia muutoksia. Jos luot uuden tiedoston " "tallentamatta, nyt tehdyt muutokset hukataan." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Tallennetaanko muutokset ennen avaamista?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Olet tehnyt tallentamattomia muutoksia. Jos avaat toisen tiedoston " "tallentamatta, nyt tehdyt muutokset hukataan." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Tallennetaanko muutokset ennen sulkemista?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Olet tehnyt tallentamattomia muutoksia. Jos suljet tallentamatta , nyt " "tehdyt muutokset hukataan." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Tallennetaanko muutokset ennen avaamista?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Olet tehnyt tallentamattomia muutoksia. Jos suljet tallentamatta , nyt " "tehdyt muutokset hukataan." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Korvaa olemassaoleva tiedosto?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Tiedosto \"%s\" on jo olemassa - haluatko korvata tämän tiedoston?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Tallennetaanko turvattomaan tiedostoon?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Päätit tallentaa salasanasi turvattomaan (salaamattomaan) tiedostomuotoon. " "Jos joku pääsee käsiksi tähän tiedostoon, he näkevät siinä olevat salasanat." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Valitse vietävä tiedosto" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Tiedostotyyppi" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Valitse tuotava tiedosto" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Automaattisesti tunnistettu" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Valitse avattava tiedosto" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Valitse tiedosto johon tallennetaan" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Syötä salasana" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Syötä uusi salasana nykyiselle salasanatiedostolle. Tiedosto täytyy " "tallentaa ennen kuin uusi salasana otetaan käyttöön." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Nykyinen salasana" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Uusi salasana" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Vahvista salasana" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Syöttämäsi salasana tiedoston salaukseksi on väärä." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Salasanat eivät täsmää" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Syötetyt salasanat eivät täsmää." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Käytetäänkö turvatonta salasanaa?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Syöttämäsi salsana ei ole turvallinen, %s. Haluatko varmasti käyttää sitä?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Avaa tiedoston lukitus syöttämällä salasana" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Tiedosto on lukittu, anna tiedoston salasana avataksesi lukituksen." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Salasana" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Antamasi salasana ei ole oikein, yritä uudestaan." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Anna tiedoston salasana" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Syötä tiedoston salasana" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Syöttämäsi salasanat eivät täsmää." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Salasanaa ei annettu" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Uudelle tiedostolle täytyy antaa salasana." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Tilin tiedot" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Kohdan nimi" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nimi" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Kohdan kuvaus" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Kuvaus" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Kohdan tyyppi" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tyyppi" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nimeä ei annettu" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Tilin nimi täytyy antaa" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Poistetaanko todella %i valittua kohtaa?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Jos poistat nämä kohdat, poistat myös kaikki niiden sisältämät kohdat." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Poistetaanko todella kansio \"%s\"?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Jos poistat tämän kansion, poistat myös kaikki sen sisältämät alikansiot ja " "avaimet." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Poistetaanko todella tili \"%s\"?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Vahvista, että haluat poistaa tämän tilin." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Kansion nimi" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Kansion kuvaus" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Kansion nimi täytyy syöttää" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Salasanojen hallintaohjelma Gnomelle" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Tuntematon virhe" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Tapahtui tuntematon virhe. Ole hyvä ja raportoi allaoleva teksti " "Revelationin kehittäjille, lisäten viestiin kuvauksen siitä mitä sellaista " "olit tekemässä, joka voisi aiheuttaa ongelman. Voit yrittää jatkaa " "Revelationin käyttöä, mutta se saattaa toimia odottamattomasti." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Salasanan tarkistaja" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Syötä tarkistettava salasana" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Tarkistuksen tulos" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Salasana vaikuttaa kelvolliselta" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Salasana %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Salasanageneraattori" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Generoitu salasana" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Pituus" #: src/lib/entry.py:170 msgid "Folder" msgstr "Kansio" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Luottokortti" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Salausavain" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Tietokanta" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Ovikoodi" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Sähköposti" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Yleinen" #: src/lib/entry.py:306 msgid "Phone" msgstr "Puhelin" #: src/lib/entry.py:322 msgid "Shell" msgstr "Komentotulkki" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:355 msgid "Website" msgstr "WWW-sivu" #: src/lib/entry.py:371 msgid "VNC" msgstr "" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kortin numero" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Luottokortin numero, yleensä 16-merkkinen numero" #: src/lib/entry.py:438 msgid "Card type" msgstr "Kortin tyyppi" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Luottokortin tyyppi, esimerkiksi MasterCard tai Visa" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV-numero" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "Luottokortin varmistusnumero, yleensä 3-numeroinen koodi kortin takana" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Varmenne" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Varmenne, esimerkiksi X.509 SSL-varmenne" #: src/lib/entry.py:474 msgid "Code" msgstr "Koodi" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Koodi, jonka avulla saadaan pääsy jonnekin" #: src/lib/entry.py:487 msgid "A database name" msgstr "Tietokannan nimi" #: src/lib/entry.py:498 msgid "Domain" msgstr "Toimialue" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Internet-toiminimi tai kirjautumisalue, kuten firma.fi tai Windows-toimialue" #: src/lib/entry.py:511 msgid "An email address" msgstr "Sähköpostiosoite" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Vanhenemispäivä" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Kuukausi, jolloin luottokortti vanhenee" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Verkkonimi" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Tietokoneen verkkonimi, esimerkiksi tietokone.alue.fi tai OMAKONE" #: src/lib/entry.py:546 msgid "Key File" msgstr "Avaintiedosto" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Avaintiedosto, jolla tunnistaudutaan SSH-palvelimelle tai avataan salattu " "X.509-varmenteet" #: src/lib/entry.py:558 msgid "Location" msgstr "Sijainti" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Fyysinen sijainti, kuten toimiston ovi" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "Salainen sana tai merkkiyhdistelmä, jolla pääsy todistetaan" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Puhelinnumero" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Puhelinnumero" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN-koodi" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "PIN-koodi, joita käytetään muun muassa luottokorteissa ja puhelimissa." #: src/lib/entry.py:606 msgid "Port number" msgstr "Porttinumero" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Porttinumero verkkopalveluiden käyttöön suoraan" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL-sijainti, kuten WWW-sivun osoite" #: src/lib/entry.py:630 msgid "Username" msgstr "Käyttäjätunnus" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Nimi tai muu tunniste itsellesi" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Jatka" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Vie" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Luo" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Tuo" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "Lisää _salasana" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "Lisää _kansio" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Muuta" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "Lataa _uudestaan" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Korvaa" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Avaa lukitus" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Päivitä" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Hylkää" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Lukitse" #: src/lib/ui.py:114 msgid "Next" msgstr "Seuraava" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Tarkista" #: src/lib/ui.py:119 msgid "Previous" msgstr "Edellinen" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Tuntematon" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Kopioi salasana" #: src/lib/ui.py:628 msgid "Select File" msgstr "Valitse tiedosto" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Selaa..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Luo" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Päivitetty %s sitten" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Etsittävä teksti" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Mikä tahansa tyyppi" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Etsi edellinen osuma" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Etsi seuraava osuma" #: src/lib/util.py:48 msgid "is too short" msgstr "on liian lyhyt" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "ei ole tarpeeksi vaihteleva" #: src/lib/util.py:83 msgid "is too weak" msgstr "on liian heikko" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "on palindromi" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekuntia" #: src/lib/util.py:348 msgid "years" msgstr "vuotta" #: src/lib/util.py:348 msgid "year" msgstr "vuosi" #: src/lib/util.py:356 msgid "months" msgstr "kuukautta" #: src/lib/util.py:356 msgid "month" msgstr "kuukausi" #: src/lib/util.py:360 msgid "weeks" msgstr "viikkoa" #: src/lib/util.py:360 msgid "week" msgstr "viikko" #: src/lib/util.py:364 msgid "days" msgstr "päivää" #: src/lib/util.py:364 msgid "day" msgstr "päivä" #: src/lib/util.py:368 msgid "hours" msgstr "tuntia" #: src/lib/util.py:368 msgid "hour" msgstr "tunti" #: src/lib/util.py:372 msgid "minute" msgstr "minuutti" #: src/lib/util.py:376 msgid "seconds" msgstr "sekuntia" #: src/lib/util.py:376 msgid "second" msgstr "sekunti" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelationin tililista" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Lista tileistä" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Luotu" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelationin versio:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Current password" msgid "Length of passwords" msgstr "Nykyinen salasana" #: data/info.olasagasti.revelation.gschema.xml:101 msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "New password" msgid "Show passwords" msgstr "Uusi salasana" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Password" msgctxt "shortcut window" msgid "Password files" msgstr "Salasana" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Enter new password" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Syötä salasana" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Syötä tiedoston salasana" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Syötä tiedoston salasana" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Nykyinen salasana" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Uusi salasana" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Salasanageneraattori" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Salasanaa ei annettu" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Kopioi salasana" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Valitse tiedosto" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Select all entries" msgstr "Valitse tiedosto" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Salasanaa ei annettu" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Etsittävä teksti" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Etsi seuraava osuma" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Etsi edellinen osuma" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "Generate" msgctxt "shortcut window" msgid "General" msgstr "Luo" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid " Find:" #~ msgstr " Etsi:" #~ msgid "The type of account to search for" #~ msgstr "Etsittävän tilin tyyppi" revelation-revelation-0.5.5/po/fr.po000066400000000000000000001611121423125252400174260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Gilles ACCAD , 2006 # jc1 , 2013 # jc1 , 2013 # jc , 2013 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: French (http://www.transifex.com/hey_neken/revelation/" "language/fr/)\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Fichier de donnée manquant" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Certains des fichiers système de Revelation ne peuvent être trouvés. Vous " "devriez réinstaller Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Données de configuration incomplètes" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation ne peut pas trouver son fichier de configuration. Vous devriez " "réinstaller Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Fichier de données non valide" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Certains des fichiers système de Revelation contiennent des données non " "valides. Vous devriez réinstaller Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Ouvrir" #: src/revelation.py:432 msgid "Open a file" msgstr "Ouvre un fichier" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "Enregi_strer" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Enregistre les données dans un fichier" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Ajouter une entrée" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Crée une nouvelle entrée" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Ajoute un dossier" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Crée un nouveau dossier" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Aller à" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Ouvre l'entrée sélectionnée" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "Édit_er" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Édite l'entrée sélectionnée" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "S_upprimer" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Supprime chaque entrée sélectionnée" #: src/revelation.py:610 msgid "New file" msgstr "Nouveau fichier" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "Ann_uler" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "Ann_uler %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Refaire" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Refaire %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Ouverture annulée" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Correspondance trouvée pour « %s »" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Aucune correspondance trouvée pour « %s »" #: src/revelation.py:1108 msgid "Old file format" msgstr "Ancien format de fichier" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation détecté que le fichier « %s » est dans l'ancien et en fait non " "sécurisé format de fichier. Il est fortement recommandé de sauvegarder ce " "fichier avec le nouveau format. Revelation le fera automatiquement si vous " "appuyez sur enregistré après l'ouverture du fichier." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Mauvais mot de passe" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Le mot de passe saisi pour le fichier « %s » n'est pas correct." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "L'ouverture a échouée" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Format de fichier non valide" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Le fichier « %s » contient des données non valides." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Données inconnues" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Le fichier « %s » contient des données inconnues. Il a peut être été créé " "par une version·de·Revelation plus récente." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Version de données inconnue" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Le fichier « %s » possède un numéro de version supérieur. Veuillez mettre à " "jour Revelation pour l'ouvrir." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Impossible de détecter le type de fichier" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Le type du fichier « %s » ne peut être déterminé automatiquement. Essayez de " "le spécifier manuellement." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Impossible d'ouvrir le fichier" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Le fichier « %s » ne peut pas être ouvert. Vérifiez que le fichier existe " "bien et que vous possédez les permissions nécessaires." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "L'entrée n'a pas de mot de passe à copier" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Mot de passe copié vers le presse-papier" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Entrées copiées" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Couper les entrées" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Entrées coupées" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Coller les entrées" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Entrées collées" #: src/revelation.py:1261 msgid "Add entry" msgstr "Ajouter une entrée" #: src/revelation.py:1267 msgid "Entry added" msgstr "Entrée ajoutée" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "L'ajout de l'entrée a été annulé" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Éditer le dossier" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Éditer l'entrée" #: src/revelation.py:1295 msgid "Update entry" msgstr "Mise à jour de l'entrée" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Entrée mise à jour" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "L'édition de l'entrée a été annulée" #: src/revelation.py:1330 msgid "Folder added" msgstr "Dossier ajouté" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "L'ajout de dossier a été annulé" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Aucune commande de démarrage pour les entrées %s" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Entrée ouverte" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Format de commande de démarrage non valide" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "La commande de lancement pour l'entrée « %s » n'est pas valide. Veuillez la " "corriger dans les préférences." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Données de l'entrée manquantes" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "L'entrée « %s » n'a pas toutes les données requises pour être ouverte." #: src/revelation.py:1397 msgid "Move entry" msgstr "Déplacer l'entrée" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Entrées déplacées" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Supprimer l'entrée" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Entrées supprimées" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "La suppression de l'entrée a été annulée" #: src/revelation.py:1455 msgid "Password changed" msgstr "Mot de passe modifié" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Changement du mot de passe annulé" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Fichier %s ouvert" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "La création du nouveau fichier a été annulée" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Données exportées vers %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Exportation annulée" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Impossible d'écrire dans le fichier" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Le fichier « %s » ne peut pas être ouvert en écriture. Vérifiez que vous " "possédez les bonnes permissions pour le faire." #: src/revelation.py:1503 msgid "Export failed" msgstr "Échec de l'exportation" #: src/revelation.py:1519 msgid "Import data" msgstr "Importation des données" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Données importées à partir de %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Importation annulée" #: src/revelation.py:1560 msgid "Locked" msgstr "Verrouillé" #: src/revelation.py:1561 msgid "File locked" msgstr "Fichier verrouillé" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Sortie annulée du fait de changements non enregistrés" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Fichier déverrouillé" #: src/revelation.py:1609 msgid "New file created" msgstr "Nouveau fichier créé" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "La création du nouveau fichier a été annulée" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Fichier %s ouvert" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Données enregistrées dans le fichier %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Enregistrement annulé" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Impossible d'enregistrer le fichier" #: src/revelation.py:1666 msgid "Save failed" msgstr "L'enregistrement a échoué" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Sortie du programme annulée" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s refait" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s annulé" #: src/revelation.py:1745 msgid "Preferences" msgstr "Préférences" #: src/revelation.py:1754 msgid "General" msgstr "Général" #: src/revelation.py:1758 msgid "Interface" msgstr "Interface" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Commandes de lancement" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Action du double-clic" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Ouvrir le compte, si cela est possible" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Un double-clic ouvre le compte dans une application externe, si les données " "requises pour cette action ont été saisies préalablement" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Éditer le compte" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Éditer le compte avec un double-clic" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Copier le mot de passe vers le presse-papier" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" "Copier le mot de passe du compte vers le presse-papier avec un double-clic" #: src/revelation.py:1803 msgid "Files" msgstr "Fichiers" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Ouvrir un fichier au démarrage :" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" "En cochant cette option, le fichier sélectionné sera ouvert lorsque le " "programme démarrera" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Sélectionner un fichier à ouvrir automatiquement" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Fichiers Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Tous les fichiers" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Fichier à ouvrir lorsque Revelation démarre" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Enregistrer automatiquement après une modification" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Enregistre automatiquement les données du fichier lorsqu'une entrée est " "ajoutée, modifiée ou supprimée" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Verrouiller le fichier après une inactivité de" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" "Verrouille automatiquement les données du fichier après une période " "d'inactivité" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "La période d'inactivité, en minutes, avant le verrouillage du fichier" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutes" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Commande de lancement pour les comptes %s. Les variables d'extension " "suivantes peuvent être utilisées :" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%% : un signe « %s »" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x : variable optionnelle d'extension" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%) :·sous chaîne optionnelle d'extension" #: src/revelation.py:1895 msgid "Passwords" msgstr "Mots de passe" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Afficher les mots de passe et les autres secrets" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Affiche les mots de passe et autres secrets tels que les codes PIN (sinon " "ils sont cachés par des ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Copier aussi le nom d'utilisateur lors de la copie du mot de passe" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "Lorsque le mot de passe est copié dans le presse-papiers, mettre le nom " "d'utilisateur avant le mot de passe comme une «chaîne» du presse-papiers" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Utiliser des caractères de ponctuation pour les mots de passe" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Lorsque les mots de passe sont générés, utilisez des caractères de " "ponctuation comme %, = { ou ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" "Le nombre de caractères des mots de passe générés - 8 ou plus est recommandé" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Longueur des mots de passe générés " #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Style de la barre d'outils" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Utiliser le style par défaut du bureau" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" "Afficher les éléments de la boîte d'outils en utilisant le style par défaut" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Afficher les icônes et les textes" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" "Afficher les éléments de la boîte d'outils avec les textes et les icônes" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Afficher les icônes et les textes importants" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" "Afficher les éléments de la boîte d'outils avec le texte sous les icônes " "importantes" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Afficher seulement les icônes" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Afficher seulement·les·icônes des éléments de la boîte d'outils" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Afficher seulement les textes" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Afficher seulement·le·texte des éléments de la boîte d'outils" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Le fichier a été modifié" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Le fichier en cours « %s » a été modifié. Voulez-vous le recharger ?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Enregistrer les changements dans le fichier en cours ?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Vous avez fait des changements qui n'ont pas été enregistrés. Si vous créez " "un nouveau fichier sans faire d'enregistrement, ces modifications seront " "perdues." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Enregistrer les changements avant l'ouverture ?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Vous avez fait des changements qui n'ont pas été enregistrés. Si vous ouvrez " "un fichier différent sans enregistrer, ces modifications seront perdues." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Enregistrer les changements avant la fermeture ?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Vous avez fait des changements qui n'ont pas été enregistrés. Si vous " "quittez sans enregistrer, ces modifications seront perdues." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Enregistrer les changements avant l'ouverture ?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Vous avez fait des changements qui n'ont pas été enregistrés. Si vous " "quittez sans enregistrer, ces modifications seront perdues." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Remplacer le fichier existant ?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Le fichier « %s » existe déjà - voulez-vous remplacer ce fichier ?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Enregistrer dans un fichier non protégé ?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Vous avez choisi d'enregistrer vos mots de passe dans un format de fichier " "non protégé (non chiffré). Toute personne accédant à ce fichier sera capable " "de voir vos mots de passe." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Sélectionner un fichier à exporter en" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Type de fichier " #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Sélectionner un fichier à importer" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Détection automatique" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Sélectionner un fichier à ouvrir" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Sélectionner un fichier à enregistrer en" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Saisir un nouveau mot de passe" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Saisir un nouveau mot de passe pour le fichier en cours. Le fichier doit " "être enregistré pour que le nouveau mot de passe soit effectif." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Mot de passe actuel" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nouveau mot de passe " #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Confirmer le mot de passe " #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "" "Le mot de passe que vous avez entré comme mot de passe du fichier actuel est " "incorrect." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Les mots de passe ne correspondent pas" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "" "Le mot de passe et la confirmation du mot de passe ne correspondent pas" #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Utiliser un mot de passe faible ?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Le mot de passe que vous avez saisi est faible; %s. Êtes-vous sûr de vouloir " "quand même l'utiliser ?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Saisir un mot de passe pour déverrouiller le fichier" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Le fichier actuel a été verrouillé. Veuillez saisir son mot de passe pour le " "déverrouiller." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Mot de passe " #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" "Le mot de passe que vous avez saisi n'est pas correct, veuillez recommencer." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Saisir le mot de passe du fichier" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "Le fichier « %s » est chiffré. S'il vous plaît entrer le mot de passe de " "fichier pour l'ouvrir" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Saisir un mot de passe pour le fichier" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "S'il vous plaît entrer un mot de passe pour le fichier « %s ». Vous aurez " "besoin de ce mot de passe pour ouvrir le fichier à une date ultérieure." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Les mots de passe saisis ne correspondent pas" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Pas mot de passe saisi" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Vous devez saisir un mot de passe pour le nouveau fichier." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Données du compte" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Remarques" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Le nom de l'entrée" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nom " #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Une description de l'entrée" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Description " #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Le type d'entrée" #: src/lib/dialog.py:859 msgid "Type" msgstr "Type " #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Remarques pour l'entrée" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nom non saisi" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Vous devez saisir un nom pour le compte" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Voulez-vous vraiment supprimer les %i entrées sélectionnées ?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "La suppression de ces entrées entraînera la suppression des données qu'elles " "pourraient contenir." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Voulez-vous vraiment supprimer le dossier « %s » ?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "La suppression de ce dossier entraînera la suppression de tous les comptes " "et autres dossiers qu'il pourrait contenir" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Voulez-vous vraiment supprimer le compte « %s » ?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Veuillez confirmer que vous souhaitez supprimer ce compte." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Le nom du dossier" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "La description du dossier" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Vous devez saisir un nom pour le dossier" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Un gestionnaire de mot de passe pour le bureau GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Erreur inconnue" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Une erreur inconnue est survenue. Merci de reporter le texte ci-dessous aux " "développeurs de Revelation en précisant ce que vous faisiez et qui aurait pu " "causer l'erreur. Vous pouvez tenter de continuer à utiliser Revelation, mais " "il pourra avoir un comportement inattendu." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Vérificateur de mot de passe" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Saisir un mot de passe à vérifier" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Le résultat de la vérification" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Le mot de passe semble correct" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Le mot de passe %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Générateur de mot de passe" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Le mot de passe généré" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Longueur " #: src/lib/entry.py:170 msgid "Folder" msgstr "Dossier" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Carte de crédit " #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Clef de chiffrement " #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Base de données " #: src/lib/entry.py:237 msgid "Door lock" msgstr "Digicode " #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Email " #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP " #: src/lib/entry.py:289 msgid "Generic" msgstr "Générique " #: src/lib/entry.py:306 msgid "Phone" msgstr "Téléphone " #: src/lib/entry.py:322 msgid "Shell" msgstr "Interpréteur de commandes " #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Bureau distant " #: src/lib/entry.py:355 msgid "Website" msgstr "Site internet " #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC " #: src/lib/entry.py:426 msgid "Card number" msgstr "Numéro de carte " #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "" "Le numéro de la carte de crédit, habituellement une suite de 16 chiffres" #: src/lib/entry.py:438 msgid "Card type" msgstr "Type de carte" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Le type de la carte de crédit, comme MasterCard·ou·VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Numéro CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Un numéro de vérification de carte bancaire, habituellement un code à 3 " "chiffres se trouvant au dos de la carte" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificat, par exemple un certificat SSL X.509" #: src/lib/entry.py:474 msgid "Code" msgstr "Code" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Un code utilisé pour accéder à quelque chose" #: src/lib/entry.py:487 msgid "A database name" msgstr "Un nom de base de données" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domaine" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Un domaine internet ou de connexion, comme organisation.org ou un domaine de " "connexion Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Une adresse email" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Date d'expiration" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Le mois d'expiration de la carte de crédit" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Nom d'hôte " #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Le nom de l'ordinateur, par exemple ordinateur.domaine.com ou MONORDI" #: src/lib/entry.py:546 msgid "Key File" msgstr "Fichier clef" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Un fichier clef, utilisé par exemple pour une authentification via SSH, ou " "pour chiffrer des certificats X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Emplacement" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Un emplacement physique, par exemple l'entrée du bureau" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Un mot secret ou une combinaison de caractères prouvant que vous avez un " "droit d'accès" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Numéro de téléphone" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Un numéro de téléphone" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Un numéro personnel d'identification, un code numérique utilisé pour les " "cartes de crédit, les téléphones etc" #: src/lib/entry.py:606 msgid "Port number" msgstr "Numéro de port" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" "Un numéro de port à utiliser pour accéder directement au service réseau" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Une URL, par exemple une adresse de site internet" #: src/lib/entry.py:630 msgid "Username" msgstr "Nom d'utilisateur " #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Un nom, ou autre chose utilisé pour vous identifier" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Continuer" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exporter" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Générer" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "I_mporter" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "Ajouter une _entrée" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Ajouter un dossier" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Changer" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Recharger" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Remplacer" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "Déverro_uiller" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "Mettre à jo_ur" #: src/lib/ui.py:104 msgid "_Discard" msgstr "Aban_donner" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Verrouiller" #: src/lib/ui.py:114 msgid "Next" msgstr "Suivant" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Vérifier" #: src/lib/ui.py:119 msgid "Previous" msgstr "Précédent" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Inconnu" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Copier le mot de passe" #: src/lib/ui.py:628 msgid "Select File" msgstr "Sélectionner le fichier" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Parcourir..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Générer" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Remarques : " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Mise à jour il y a %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Texte à rechercher pour" #: src/lib/ui.py:1597 msgid "Any type" msgstr "N'importe quel type" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Trouver l'occurrence précédente" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Trouver l'occurrence suivante" #: src/lib/util.py:48 msgid "is too short" msgstr "est trop court" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "n'est pas assez complexe" #: src/lib/util.py:83 msgid "is too weak" msgstr "est trop faible" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "est un palindrome" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i secondes" #: src/lib/util.py:348 msgid "years" msgstr "années" #: src/lib/util.py:348 msgid "year" msgstr "année" #: src/lib/util.py:356 msgid "months" msgstr "mois" #: src/lib/util.py:356 msgid "month" msgstr "mois" #: src/lib/util.py:360 msgid "weeks" msgstr "semaines" #: src/lib/util.py:360 msgid "week" msgstr "semaine" #: src/lib/util.py:364 msgid "days" msgstr "jours" #: src/lib/util.py:364 msgid "day" msgstr "jour" #: src/lib/util.py:368 msgid "hours" msgstr "heures" #: src/lib/util.py:368 msgid "hour" msgstr "heure" #: src/lib/util.py:372 msgid "minute" msgstr "minute" #: src/lib/util.py:376 msgid "seconds" msgstr "secondes" #: src/lib/util.py:376 msgid "second" msgstr "seconde" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Liste de comptes Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Liste du compte" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Créé :" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Version de Revelation :" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Révélation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Fichier à ouvrir lorsque Revelation démarre" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Gestionnaire de mot de passe" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Organiser et sécuriser vos mots de passe" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Éditer le compte avec un double-clic" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Ouvrir un fichier au démarrage :" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Ouvrir un fichier au démarrage :" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Verrouiller le fichier après une inactivité de" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Enregistrer automatiquement après une modification" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Enregistre automatiquement les données du fichier lorsqu'une entrée est " "ajoutée, modifiée ou supprimée" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Longueur des mots de passe générés " #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" "Le nombre de caractères des mots de passe générés - 8 ou plus est recommandé" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Utiliser des caractères de ponctuation pour les mots de passe" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Utiliser des caractères de ponctuation pour les mots de passe" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Afficher les mots de _passe" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Style de la barre d'outils" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Mots de passe" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Crée un nouveau dossier" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Ouvre un fichier" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Saisir un mot de passe pour le fichier" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Mot de passe actuel" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nouveau mot de passe " #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Générateur de mot de passe" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Pas mot de passe saisi" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Éditer l'entrée" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Copier le mot de passe" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Sélectionner le fichier" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Couper les entrées" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_Désélectionner tout" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Pas mot de passe saisi" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Texte à rechercher pour" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Trouver l'occurrence suivante" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Trouver l'occurrence précédente" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Général" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "_Quitter" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Fichier" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nouveau" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Enre_gistrer sous..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Changer le mot de _passe..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Fermer" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Quitter" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Cou_per" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Copier" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Copier le mot de passe" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "C_oller" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "Tout _sélectionner" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Désélectionner tout" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "C_hercher..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Trouver le _suivant" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Trouver le _précédent" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Préfére_nces" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "E_ntrée" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "Aj_outer une entrée..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Ajouter un _dossier" #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Vue" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "Barre d'ou_tils principale" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "_Barre de recherche" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "Barre de _statut" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Générateur de mot de passe" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Vérifi_cateur de mot de passe" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Afficher les mots de _passe" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Aide" #: data/ui/menubar.ui:263 msgid "_About" msgstr "À _propos" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Aucune correspondance trouvée" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "La chaîne « %s » ne correspond à aucune entrée. Essayez une recherche " #~ "avec une chaîne différente." #~ msgid " Find:" #~ msgstr " Rechercher :" #~ msgid "The type of account to search for" #~ msgstr "Le type de compte à rechercher pour" revelation-revelation-0.5.5/po/it_IT.po000066400000000000000000001304031423125252400200260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # antonio lanzone , 2014 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Italian (Italy) (http://www.transifex.com/hey_neken/" "revelation/language/it_IT/)\n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:92 msgid "Invalid data files" msgstr "" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "" #: src/revelation.py:432 msgid "Open a file" msgstr "" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "" #: src/revelation.py:438 msgid "Save data to a file" msgstr "" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "" #: src/revelation.py:447 msgid "Create a new entry" msgstr "" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "" #: src/revelation.py:454 msgid "Create a new folder" msgstr "" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Vai a" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Modifica" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Ri_muovi" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "" #: src/revelation.py:610 msgid "New file" msgstr "" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Password errata" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1124 msgid "Unknown data" msgstr "" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1195 msgid "Entries copied" msgstr "" #: src/revelation.py:1217 msgid "Cut entries" msgstr "" #: src/revelation.py:1224 msgid "Entries cut" msgstr "" #: src/revelation.py:1239 msgid "Paste entries" msgstr "" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "" #: src/revelation.py:1261 msgid "Add entry" msgstr "" #: src/revelation.py:1267 msgid "Entry added" msgstr "" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "" #: src/revelation.py:1295 msgid "Update entry" msgstr "" #: src/revelation.py:1300 msgid "Entry updated" msgstr "" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1330 msgid "Folder added" msgstr "" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "" #: src/revelation.py:1405 msgid "Entries moved" msgstr "" #: src/revelation.py:1432 msgid "Remove entry" msgstr "" #: src/revelation.py:1438 msgid "Entries removed" msgstr "" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "All files" msgid "Closed file %s" msgstr "Tutti i file" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "" #: src/revelation.py:1519 msgid "Import data" msgstr "" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "" #: src/revelation.py:1560 msgid "Locked" msgstr "" #: src/revelation.py:1561 msgid "File locked" msgstr "" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1586 msgid "File unlocked" msgstr "" #: src/revelation.py:1609 msgid "New file created" msgstr "" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "" #: src/revelation.py:1666 msgid "Save failed" msgstr "" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "" #: src/revelation.py:1754 msgid "General" msgstr "" #: src/revelation.py:1758 msgid "Interface" msgstr "" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: src/revelation.py:1803 msgid "Files" msgstr "" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "File di Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Tutti i file" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Il file è stato modificato" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Il file corrente '%s' è stato modificato. Vuoi ricaricarlo?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Salvare le modifiche per questo file?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Hai effettuato delle modifiche a questo file che non sono state salvate. Se " "crei un nuovo file senza salvare i cambiamenti verranno persi." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Salvare le modifiche prima dell'apertura?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Salvare i cambiamenti prima di chiudere?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Salvare le modifiche prima dell'apertura?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you create a new file " #| "without saving then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Hai effettuato delle modifiche a questo file che non sono state salvate. Se " "crei un nuovo file senza salvare i cambiamenti verranno persi." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Tipo di file" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Seleziona il file da importare" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Rileva automaticamente" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Seleziona il file da aprire" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Seleziona il file da salvare" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Inserisci una nuova password" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" #: src/lib/dialog.py:641 msgid "Current password" msgstr "Password attuale" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nuova password" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Conferma la password" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "La password che hai inserito per questo file è sbagliata." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Le password non corrispondono" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "La password e la passeword di conferma non corrispondono." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Utilizzare una password insicura?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Inseisci la password per sbloccare il file" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Password" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Inserisci la password del file" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Inserisci la password per il file" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "La password che hai inserito non corrisponde." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Nessuna password inserita" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Devi inserire una password per il nuovo data file." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nome" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Descrizione" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tipo" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nome non iserito" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Devi inserire un nome per l'account" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Generatore di password" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "" #: src/lib/dialog.py:1228 msgid "Length" msgstr "" #: src/lib/entry.py:170 msgid "Folder" msgstr "Cartella" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Carta di credito" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Database" #: src/lib/entry.py:237 msgid "Door lock" msgstr "" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Email" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Generico" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefono" #: src/lib/entry.py:322 msgid "Shell" msgstr "" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Desktop remoto" #: src/lib/entry.py:355 msgid "Website" msgstr "Sito internet" #: src/lib/entry.py:371 msgid "VNC" msgstr "VCN" #: src/lib/entry.py:426 msgid "Card number" msgstr "Numero carta" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Di solito il numero di una carta di credito è di 16 cifre" #: src/lib/entry.py:438 msgid "Card type" msgstr "Tipo di carta" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Il tipo di carta di credito, come MasterCard o VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Numero CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Il numero di verifica della Carta di Credito, di solito sono le ultime 3 " "cifre che trovi sul retro della carta" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificato" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificato, come il certificato X.509 SSL" #: src/lib/entry.py:474 msgid "Code" msgstr "Codice" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Un codice utilizzato per accedere a qualcosa" #: src/lib/entry.py:487 msgid "A database name" msgstr "Nome del database" #: src/lib/entry.py:498 msgid "Domain" msgstr "Dominio" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:511 msgid "An email address" msgstr "Un indirizzo email" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Data di scadenza" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Il mese in cui la carta di credito scade" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Nome Host" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" "Il nome del computer, come ad esempio computer.dominio.com oppure " "ILMIOCOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "File chiave" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:558 msgid "Location" msgstr "Luogo" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Un luogo fisico, come come l'ingresso dell'ufficio" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Una parola segreta o una combinazione di caratteri per permetterti di " "accedere" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Numero di telefono" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Un numero di telefono" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Un numero identificativo personale, come il codice numerico utilizzato per " "le carte di credito, telefoni etc" #: src/lib/entry.py:606 msgid "Port number" msgstr "Numero porta" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Un URL come l'indirizzo di un sito web" #: src/lib/entry.py:630 msgid "Username" msgstr "Nome utente" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Un nome o un'altro identificativo utilizzato per identificarti" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Continua" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Esporta" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Genera" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importa" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Aggiungi voce" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Aggiungi cartella" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Cambia" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Ricarica" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Sostituisci" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Sblocca" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Aggiorna" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Annulla" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Blocca" #: src/lib/ui.py:114 msgid "Next" msgstr "Avanti" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Controlla" #: src/lib/ui.py:119 msgid "Previous" msgstr "Indietro" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Sconosciuto" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Copia la password" #: src/lib/ui.py:628 msgid "Select File" msgstr "Seleziona il file" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Sfoglia..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Genera" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Tutti i tipi" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "" #: src/lib/util.py:48 msgid "is too short" msgstr "" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:83 msgid "is too weak" msgstr "" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "" #: src/lib/util.py:348 msgid "years" msgstr "" #: src/lib/util.py:348 msgid "year" msgstr "" #: src/lib/util.py:356 msgid "months" msgstr "" #: src/lib/util.py:356 msgid "month" msgstr "" #: src/lib/util.py:360 msgid "weeks" msgstr "" #: src/lib/util.py:360 msgid "week" msgstr "" #: src/lib/util.py:364 msgid "days" msgstr "" #: src/lib/util.py:364 msgid "day" msgstr "" #: src/lib/util.py:368 msgid "hours" msgstr "" #: src/lib/util.py:368 msgid "hour" msgstr "" #: src/lib/util.py:372 msgid "minute" msgstr "" #: src/lib/util.py:376 msgid "seconds" msgstr "" #: src/lib/util.py:376 msgid "second" msgstr "" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Current password" msgid "Length of passwords" msgstr "Password attuale" #: data/info.olasagasti.revelation.gschema.xml:101 msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "New password" msgid "Show passwords" msgstr "Nuova password" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Password" msgctxt "shortcut window" msgid "Password files" msgstr "Password" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Enter new password" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Inserisci una nuova password" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Inserisci la password per il file" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Inserisci la password per il file" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Password attuale" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nuova password" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Generatore di password" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Nessuna password inserita" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Copia la password" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Seleziona il file" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Select all entries" msgstr "Seleziona il file" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Nessuna password inserita" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "Generate" msgctxt "shortcut window" msgid "General" msgstr "Genera" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid " Find:" #~ msgstr "Cerca:" revelation-revelation-0.5.5/po/lt.po000066400000000000000000001366371423125252400174540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Remigijus Jarmalavičius , 2011 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Lithuanian (http://www.transifex.com/hey_neken/revelation/" "language/lt/)\n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " "11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " "1 : n % 1 != 0 ? 2: 3);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:92 msgid "Invalid data files" msgstr "" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "" #: src/revelation.py:432 msgid "Open a file" msgstr "" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "" #: src/revelation.py:438 msgid "Save data to a file" msgstr "" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "" #: src/revelation.py:447 msgid "Create a new entry" msgstr "" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "" #: src/revelation.py:454 msgid "Create a new folder" msgstr "" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Eiti į" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Redaguoti" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "_Pašalinti" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "" #: src/revelation.py:610 msgid "New file" msgstr "" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Neteisingas slaptažodis" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1124 msgid "Unknown data" msgstr "" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1195 msgid "Entries copied" msgstr "" #: src/revelation.py:1217 msgid "Cut entries" msgstr "" #: src/revelation.py:1224 msgid "Entries cut" msgstr "" #: src/revelation.py:1239 msgid "Paste entries" msgstr "" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "" #: src/revelation.py:1261 msgid "Add entry" msgstr "" #: src/revelation.py:1267 msgid "Entry added" msgstr "" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "" #: src/revelation.py:1295 msgid "Update entry" msgstr "" #: src/revelation.py:1300 msgid "Entry updated" msgstr "" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1330 msgid "Folder added" msgstr "" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "" #: src/revelation.py:1405 msgid "Entries moved" msgstr "" #: src/revelation.py:1432 msgid "Remove entry" msgstr "" #: src/revelation.py:1438 msgid "Entries removed" msgstr "" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "All files" msgid "Closed file %s" msgstr "Visi failai" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "" #: src/revelation.py:1519 msgid "Import data" msgstr "" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "" #: src/revelation.py:1560 msgid "Locked" msgstr "" #: src/revelation.py:1561 msgid "File locked" msgstr "" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1586 msgid "File unlocked" msgstr "" #: src/revelation.py:1609 msgid "New file created" msgstr "" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "" #: src/revelation.py:1666 msgid "Save failed" msgstr "" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "" #: src/revelation.py:1754 msgid "General" msgstr "" #: src/revelation.py:1758 msgid "Interface" msgstr "" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: src/revelation.py:1803 msgid "Files" msgstr "" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation failai" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Visi failai" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutės" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" "Simbolių skaičius slaptažodžių generavimui - 8 ar daugiau simbolių " "rekomenduojama" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Failo turinys pasikeitė" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "" "Dabartinis failo '%s' turinys pasikeitė. Ar norite atidaryti failą iš naujo?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Išsaugoti pakeitimus į failą?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Padarėte pakeitimus kurie dar neišsaugoti. Jeigu sukursite naują failą " "neišsaugoję, visi pakeitimai bus prarasti." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Išsaugoti prieš atidarant?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Padarėte pakeitimus kurie dar neišsaugoti. Jeigu atidarysite kitą failą " "neišsaugoję, visi pakeitimai bus prarasti." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Išsaugoti pakeitimus prieš išeinant?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Padarėte pakeitimus kurie dar nebuvo išsaugoti. jeigu uždarysite " "neišsaugoję, pakeitimai bus prarasti." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Išsaugoti prieš atidarant?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Padarėte pakeitimus kurie dar nebuvo išsaugoti. jeigu uždarysite " "neišsaugoję, pakeitimai bus prarasti." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Pakeisti egzistuojantį failą?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Failas '%s' jau egzistuoja - ar norite pakeisti?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Išsaugoti nesaugų failą?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Pasirinkote išsaugoti failą su nesaugiu formatu - jeigu kas nors galės " "prieiti prie šio failo, jie galės pamatyti slaptažodžius." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Pasirinkite failą eksportavimui" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Failo tipas" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Pasirinkite failą importavimui" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Automatiškai atpažinti" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Pasirinkite failą atidarymui" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Pasirinkite failą išsaugojimui" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Įveskite slaptažodį" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Įveskite slaptažodį atidarytam duomenų failui. Failas turi būti išsaugotas " "prieš slaptažodžio pakeitimą." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Dabartinis slaptažodis" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Naujas slaptažodis" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Patvirtinti slaptažodį" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Slaptažodis kurį įvedėte dabartiniam failui yra neteisingas." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Slaptažodžiai nesutampa" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Slaptažodžio ir slaptažodžio patvirtinimo laukai nesutampa." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Naudoti nesaugų slaptažodį?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Slaptažodis kurį įvedėte yra nesaugus; %s. Ar tikrai norite tokį naudoti?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Įveskite slaptažodį slaptažodžiui atrakinti" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Dabartinis failas buvo užrakintas, įveskite slaptažodį norėdami atrakinti." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Slaptažodis" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Slaptažodis kurį įvedėte yra neteisingas, pamėginkite dar kartą." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Įveskite slaptažodį" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Įveskite slaptažodį failui" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Slaptažodžiai kuriuos įvedėte nesutampa." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Neįvestas slaptažodis" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Turite įvesti slaptažodį naujam duomenų failui." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Paskyros duomenys" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Įrašo pavadinimas" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Pavadinimas" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Įrašo aprašymas" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Aprašymas" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Įrašo tipas" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tipas" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Neįvestas pavadinimas" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Turite įvesti paskyros pavadinimą" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Ar tikrai pašalinti %i pasirinktus įrašus?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Pašalinus šį įrašą kartu galite pašalinti ir įrašus kurie jam priklauso." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Ar tikrai ištrinti katalogą '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Pašalinus šį įrašą bus pašalintos visos paskyros ir katalogai kurie jam " "priklauso." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Ar tikrai pašalinti paskyrą '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Patvirtinkite ar tikrai norite pašalinti paskyrą." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Katalogo pavadinimas" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Katalogo aprašymas" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Privalote įvesti katalogo pavadinimą" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Slaptažodžių valdytojas GNOME darbastaliui" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Nežinoma klaida" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Nežinoma klaida. Prašome pranešti apie tai Revelation programuotojams tekste " "apačioje, taip pat aprašius kaip ši klaida įvyko. Galite naudotis Revelation " "programa toliau, tačiau ji gali elgtis netikėtai." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Slaptažodžio tikrinimas" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Įveskite slaptažodį patikrinimui" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Rezultatas patikrinto slaptažodžio" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Slaptažodis atrodo saugus" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Slaptažodis %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Slaptažodžio generatorius" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Sugeneruotas slaptažodis" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Ilgis" #: src/lib/entry.py:170 msgid "Folder" msgstr "Katalogas" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kreditinė kortelė" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Kriptografijos raktas" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Duomenų bazė" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Durų užraktas" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "El. paštas" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Bendras" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefonas" #: src/lib/entry.py:322 msgid "Shell" msgstr "Pultas" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:355 msgid "Website" msgstr "Tinklapis" #: src/lib/entry.py:371 msgid "VNC" msgstr "" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kortelės numeris" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Kreditinės kortelės numeris, dažniausiai 16 skaitmenų" #: src/lib/entry.py:438 msgid "Card type" msgstr "Kortelės tipas" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Kreditinės kortelės tipas, kaip MasterCard arba VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CVV numeris" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Kreditinės kortelės patikros numeris, dažniausiai 3 skaitmenų randamas " "kortelės gale" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Sertifikatas" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Sertifikatas, pavyzdžiui X.509 SSL Certificate" #: src/lib/entry.py:474 msgid "Code" msgstr "Kodas" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Kodas naudojamas priėjimui prie kažko" #: src/lib/entry.py:487 msgid "A database name" msgstr "Duomenų bazės pavadinimas" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domenas" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Interneto arba prisijungimo domenas, kaip organizacija.org arba Windows " "prisijungimo domenas" #: src/lib/entry.py:511 msgid "An email address" msgstr "El. pašto adresas" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Galiojimo data" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Mėnuo, kada kredito kortelė nustos galioti" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Pagrindinio kompiuterio vardas" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" "Kompiuterio pavadinimas, kaip kompiuteris.domenas.com arba MANOKOMPIUTERIS" #: src/lib/entry.py:546 msgid "Key File" msgstr "Rakto failas" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Rakto failas yra naudojamas atpažinimui, pavyzdžiui per ssh arba encrypt " "X.509 sertifikatai" #: src/lib/entry.py:558 msgid "Location" msgstr "Vieta" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Fizinė vieta, kaip įėjimas į ofisą" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "Slaptažodis arba simbolių kombinacija naudojama priėjimui" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefono numeris" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Telefono numeris" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Personal Identification Number (PIN), skaitmeninis kodas naudojamas " "kreditinėse kortelėse, telefonuose ir pan." #: src/lib/entry.py:606 msgid "Port number" msgstr "Prievado numeris" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Interneto prievado numeris, naudojamas priėjimui" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Uniform Resource Locator (URL), interneto adresas" #: src/lib/entry.py:630 msgid "Username" msgstr "Naudotojo vardas" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Vardas ar kitas atpažinimo požymis " #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Tęsti" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Eksportuoti" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Generuoti" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importuoti" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Pridėti įrašą" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Pridėti katalogą" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Pakeisti" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Perkrauti" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Pakeisti" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Atrakinti" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Atnaujinti" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Atšaukti" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Užrakinti" #: src/lib/ui.py:114 msgid "Next" msgstr "Sekantis" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Patikrinti" #: src/lib/ui.py:119 msgid "Previous" msgstr "Ankstesnis" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Nežinomas" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Nukopijuoti slaptažodį" #: src/lib/ui.py:628 msgid "Select File" msgstr "Pasirinkite failą" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Naršyti..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Generuoti" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Atnaujinta prieš %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Tekstas paieškai" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Bet koks tipas" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Ieškoti prieš tai buvusio pasikartojimo" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Ieškoti kito pasikartojimo" #: src/lib/util.py:48 msgid "is too short" msgstr "yra per trumpas" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "nėra pakankamai įvairus" #: src/lib/util.py:83 msgid "is too weak" msgstr "yra per silpnas" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "vienodas skaitant iš bet kurios pusės" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekundžių" #: src/lib/util.py:348 msgid "years" msgstr "metų" #: src/lib/util.py:348 msgid "year" msgstr "metai" #: src/lib/util.py:356 msgid "months" msgstr "mėnesių" #: src/lib/util.py:356 msgid "month" msgstr "mėnuo" #: src/lib/util.py:360 msgid "weeks" msgstr "savaičių" #: src/lib/util.py:360 msgid "week" msgstr "savaitė" #: src/lib/util.py:364 msgid "days" msgstr "dienų" #: src/lib/util.py:364 msgid "day" msgstr "diena" #: src/lib/util.py:368 msgid "hours" msgstr "valandų" #: src/lib/util.py:368 msgid "hour" msgstr "valanda" #: src/lib/util.py:372 msgid "minute" msgstr "minutė" #: src/lib/util.py:376 msgid "seconds" msgstr "sekundžių" #: src/lib/util.py:376 msgid "second" msgstr "sekundė" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation paskyrų sąrašas" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Paskyrų sąrašas" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Sukurta:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation versija:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Current password" msgid "Length of passwords" msgstr "Dabartinis slaptažodis" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" "Simbolių skaičius slaptažodžių generavimui - 8 ar daugiau simbolių " "rekomenduojama" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "New password" msgid "Show passwords" msgstr "Naujas slaptažodis" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Password" msgctxt "shortcut window" msgid "Password files" msgstr "Slaptažodis" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Enter new password" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Įveskite slaptažodį" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Įveskite slaptažodį failui" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Įveskite slaptažodį failui" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Dabartinis slaptažodis" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Naujas slaptažodis" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Slaptažodžio generatorius" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Neįvestas slaptažodis" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Nukopijuoti slaptažodį" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Pasirinkite failą" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Select all entries" msgstr "Pasirinkite failą" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Neįvestas slaptažodis" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Tekstas paieškai" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Ieškoti kito pasikartojimo" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Ieškoti prieš tai buvusio pasikartojimo" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "Generate" msgctxt "shortcut window" msgid "General" msgstr "Generuoti" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid " Find:" #~ msgstr " Ieškoti:" #~ msgid "The type of account to search for" #~ msgstr "Paskyros tipas kurios ieškoti" revelation-revelation-0.5.5/po/meson.build000066400000000000000000000000461423125252400206170ustar00rootroot00000000000000i18n.gettext(rvl_name, preset:'glib') revelation-revelation-0.5.5/po/nl.po000066400000000000000000001567751423125252400174530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Dirk Dierickx , 2012 # GPM van Steen , 2018 # Heimen Stoffels , 2015,2018,2020 # Lars van der Meijden , 2014 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Dutch (http://www.transifex.com/hey_neken/revelation/language/" "nl/)\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Ontbrekende gegevensbestanden" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Enkele systeembestanden van Revelation kunnen niet worden gevonden; " "installeer Revelation opnieuw." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Ontbrekende configuratiegegevens" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation kan zijn configuratiebestanden niet vinden.; installeer " "Revelation opnieuw." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Ongeldige gegevensbestanden" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Enkele systeembestanden van Revelation bevatten ongeldige gegevens; " "installeer Revelation opnieuw." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Open" #: src/revelation.py:432 msgid "Open a file" msgstr "Open een bestand" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Bewaar" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Gegevens opslaan in een bestand" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Item toevoegen" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Nieuw item aanmaken" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Map toevoegen" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Nieuwe map aanmaken" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Ga naar" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Ga naar de geselecteerde items" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Aanpassen" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Geselecteerd item bewerken" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Ver_wijderen" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Geselecteerde items verwijderen" #: src/revelation.py:610 msgid "New file" msgstr "Nieuw Bestand" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Ongedaan maken" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Maak %s ongedaan" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Herhaal" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Herhaal %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Geannuleerde openen" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Overeenkomst gevonden voor '%s'" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Geen overeenkomst gevonden voor '%s'" #: src/revelation.py:1108 msgid "Old file format" msgstr "Oud bestandsformaat" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation heeft ontdekt dat het bestand '%s' een oud en onveilig " "bestandsformaat heeft. Het wordt sterk aanbevolen om dit bestand op te slaan " "in een nieuw formaat. Revelation zal dit automatisch doen als je het bestand " "na het openen opslaat." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Wachtwoord niet juist" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Het ingevoerde wachtwoord voor het bestand '%s' is onjuist" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Openen mislukt" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Ongeldig bestandsformaat" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Het bestand '%s' bevat ongeldige gegevens." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Onbekende gegevens" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Het bestand '%s' bevat onbekende gegevens. Mogelijk is het aangemaakt door " "een nieuwere versie van Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Onbekende gegevensversie" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Het bestand '%s' heeft een toekomstig versienummer. Gelieve Revelation op te " "waarderen om het te openen." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Niet in staat om bestandstype vast te stellen." #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Het bestandstype van het bestand '%s' kon niet automatisch vastgesteld " "worden. Probeer het bestandstype handmatig op te geven." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Niet in staat om het bestand te openen." #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Het bestand '%s' kon niet worden geopend. Zorg ervoor het bestand bestaat en " "dat u toestemming heeft om het te openen." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Item heeft geen wachtwoord om te kopiëren" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Wachtwoord gekopieerd naar klembord" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Items gekopieerd" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Knip items" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Items geknipt" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Items plakken" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Items geplakt" #: src/revelation.py:1261 msgid "Add entry" msgstr "Item toevoegen" #: src/revelation.py:1267 msgid "Entry added" msgstr "Item toegevoegd" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Toevoegen item geannuleerd" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Map bewerken" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Item bewerken" #: src/revelation.py:1295 msgid "Update entry" msgstr "Item bijwerken" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Item bijgewerkt" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Item bewerken geannuleerd" #: src/revelation.py:1330 msgid "Folder added" msgstr "Map toegevoegd" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Map toevoegen afgebroken" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Geen ganaar-commando gevonden voor %s-invoeren" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Item geopend" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Ongeldig ganaar-commando-opmaak" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "Het ganaar-commando voor '%s'-invoeren is ongeldig. Corrigeer dit in de " "voorkeuren." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Ontbrekende itemgegevens" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "De invoer '%s' bevat niet de vereiste data om het te openen." #: src/revelation.py:1397 msgid "Move entry" msgstr "Item verplaatsen" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Items verplaatst" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Item verwijderen" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Items verwijderd" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Item verwijderen geannuleerd" #: src/revelation.py:1455 msgid "Password changed" msgstr "Wachtwoord aangepast" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Wachtwoord aanpassen afgebroken" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Bestand %s geopend" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Nieuw bestand afgebroken" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Gegevens naar %s geëxporteerd" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Exporteren geannuleerd" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Niet in staat om naar bestand weg te schrijven" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Het bestand '%s' kon niet worden geopend voor schrijven. Zorg dat u de " "juiste rechten heeft om ernaar te schrijven." #: src/revelation.py:1503 msgid "Export failed" msgstr "Exporteren mislukt" #: src/revelation.py:1519 msgid "Import data" msgstr "Gegevens importen" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Gegevens importeren vanuit '%s'" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Importeren geannuleerd" #: src/revelation.py:1560 msgid "Locked" msgstr "Geblokkeerd" #: src/revelation.py:1561 msgid "File locked" msgstr "Bestand geblokkeerd" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "U moet eerst de wijzigingen opslaan voordat u kunt afsluiten." #: src/revelation.py:1586 msgid "File unlocked" msgstr "Bestand ontgrendeld" #: src/revelation.py:1609 msgid "New file created" msgstr "Nieuw bestand aangemaakt" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Nieuw bestand afgebroken" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Bestand %s geopend" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Data opgeslagen naar bestand %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Bewaren afgebroken" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Niet in staat om bestand op te slaan" #: src/revelation.py:1666 msgid "Save failed" msgstr "Bewaren mislukt" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Afsluiten geannuleerd" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s herhaald" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s ongedaan gemaakt" #: src/revelation.py:1745 msgid "Preferences" msgstr "Voorkeuren" #: src/revelation.py:1754 msgid "General" msgstr "Algemeen" #: src/revelation.py:1758 msgid "Interface" msgstr "Interface" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Ganaar-commando's" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Dubbelklikactie" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Indien mogelijk, ga naar account" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Ga naar het account (openen in externe applicatie) bij dubbelklikken wanneer " "vereiste data is ingevuld" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Account bewerken" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Het account bewerken bij dubbelklikken" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Wachtwoord kopieren naar klembord" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopieer het accountwachtwoord naar het klembord bij dubbelklikken" #: src/revelation.py:1803 msgid "Files" msgstr "Bestanden" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Bestand openen bij het opstarten:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" "Wanneer deze optie is ingeschakeld, zal het bestand worden geopend wanneer " "de applicatie wordt gestart" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Bestand selecteren om automatisch te openen" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation bestand" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Alle bestanden" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Bestand op te openen wanneer Revelation wordt gestart" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Gegevens automatisch opslaan na wijzigingen" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Gegevensbestand automatisch opslaan als een item is toegevoegd, aangepast of " "verwijderd." #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Bestand vergrendelen wanneer inactief gedurende" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" "Automatisch het databestand vergrendelen bij een periode van inactiviteit" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" "De inactiviteitsperiode alvorens het bestand te vergrendelen, in minuten" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minuten" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Ga naar commando %s voor accounts. De volgende uitbreidingsvariabelen kunnen " "worden gebruikt:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: een \"%\" teken" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: optionele uitbreidingsvariabele" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): optionele uitbreiding met substring" #: src/revelation.py:1895 msgid "Passwords" msgstr "Wachtwoorden" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Wachtwoorden en andere geheimen weergeven" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Wachtwoorden en andere geheimen weergeven, zoals PIN-codes (worden anders " "verborgen met ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Gebruikersnaam meekopiëren bij kopiëren wachtwoord" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "Wanneer het wachtwoord naar het klembord is gekopieerd, plaatst de " "gebruikersnaam voor het wachtwoord op het klembord \"ketting\"" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Gebruik leestekens voor wachtwoorden" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Wanneer wachtwoorden worden gegenereerd, gebruik leestekens als %, =, { of ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Het aantal karakters in een wachtwoord - 8 of meer worden aangeraden" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Lengte van de gegenereerde wachtwoorden" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Werkbalkstijl" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Gebruik desktopstandaard" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Toon werkbalkopties in standaardstijl" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Toon ikonen en tekst" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Toon werkbalkopties met pictogrammen èn tekst." #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Toon ikonen en belangrijke tekst" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Toon toolnar items met text naast belangrijke iconen" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Alleen pictogrammen zichtbaar" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Werkbalkelementen alleen met pictogrammen weergeven" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Alleen text zichtbaar" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Werkbalkelementen alleen met tekst weergeven" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Auteursrecht" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" "Revelation is vrije software; je kunt het herdistribueren en / of wijzigen\n" "het onder de voorwaarden van de GNU General Public License zoals " "gepubliceerd door\n" "de Free Software Foundation; ofwel versie 2 van de licentie, of\n" "(naar uw keuze) elke latere versie.\n" "\n" "Revelation wordt verspreid in de hoop dat het nuttig zal zijn,\n" "maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van\n" "VERKOOPBAARHEID OF GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de\n" "GNU General Public License voor meer details.\n" "\n" "U zou een kopie van de GNU General Public License moeten hebben ontvangen\n" "samen met Revelation; zo niet, schrijf dan naar de Free Software Foundation, " "Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 Verenigde Staten" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Bestand is aangepast" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Het active bestand '%s' is aangepast, Wilt U het herladen?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Aanpassingen bewaren in het active bestand?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "U hebt aanpassingen gemaakt die nog niet bewaard zijn. Wanneer U een nieuw " "bestand aanmaakt zonder deze aanpassingen te bewaren zullen zij verloren " "gaan." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Wijzigingen opslaan voor het openen?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "U hebt aanpassingen gemaakt welke nog niet bewaard zijn. Als U een ander " "bestand opent zonder deze te bewaren zullen deze aanpassingen verloren gaan." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Aanpassingen bewaren voor afsluiten?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "U hebt veranderingen aangebracht welke nog niet bewaard zijn. Als U het " "programma afsluit zonder deze te bewaren zullen deze aanpassingen verloren " "gaan." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Wijzigingen opslaan voor het openen?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "U hebt veranderingen aangebracht welke nog niet bewaard zijn. Als U het " "programma afsluit zonder deze te bewaren zullen deze aanpassingen verloren " "gaan." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Bestaand bestand vervangen?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Bestand '%s' bestaat al - wilt U het vervangen?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Bewaren in een onbeveiligd bestand?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "U hebt ervoor gekozen om uw wachtwoorden te bewaren in een onbeveiligd " "(zonder encryptie) bestand - Indien iemand anders toegang heeft tot dit " "bestand zullen al uw wachtwoorden zichtbaar zijn." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Kies bestand om naar te exporteren" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Bestandstype" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Kies bestand om te importeren" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Automatisch detecteren" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Kies bestand om te openen" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Kies bestand om te bewaren" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Geef een nieuw wachtwoord in" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Geef een nieuw wachtwoord in voor het huidige data bestand. Het bestand moet " "eerst bewaard worden voordat het nieuwe wachtwoord van toepassing is." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Huidige wachtwoord" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nieuw wachtwoord" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Wachtwoord confirmeren" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "" "Het wachtwoord dat u ingegeven hebt voor het huidige bestand is niet juist." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Wachtwoorden zijn verschillend" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Het ingegeven wachtwoord en verificatie wachtwoord zijn verschillend." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Onbeveiligd wachtwoord gebruiken?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Het wachtwoord dat U ingegeven hebt is onveilig; %s. Bent U er zeker van " "dat U dit wachtwoord wilt gebruiken?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Geef het wachtwoord in om het bestand te ontgrendelen." #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Het huidige bestand is vergrendeld, geef AUB het wachtwoord in om het te " "ontgrendelen." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Wachtwoord" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Het ingegeven wachtwoord is niet juist, probeer het nogmaals." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Geef het bestandswachtwoord in" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "Het bestand '%s' is beveiligd. Voer het bestandswachtwoord in om het te " "openen." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Geef wachtwoord voor bestand in" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Voer een wachtwoord in voor het bestand '%s'. Het wachtwoord word gebruikt " "om het bestand later te openen." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Het ingegeven wachtwoord is verschillend" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Geen wachtwoord ingegeven" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "U moet een wachtwoord ingeven voor het nieuwe databestand." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Accountgegevens" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notities" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Invoernaam" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Naam" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Invoerbeschrijving" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Beschrijving" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Invoertype" #: src/lib/dialog.py:859 msgid "Type" msgstr "Type" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notities voor het item" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Naam niet ingegeven" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "U moet een naam invoeren voor het account." #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Echt %i geselecteerde items verwijderen?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Bij het verwijderen van deze items zullen ook alle andere items die er deel " "van uit maken verwijderd worden." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Echt map '%s' verwijderen?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Bij het verwijderen van deze map zullen ook alle accounts en mappen die er " "deel van uit maken verwijderd worden." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Echt account '%s' verwijderen?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Gelieve te bevestigen dat u dit account wilt verwijderen." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Naam van de map" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Berschrijving van de map" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "U moet de map een naam geven" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Een wachtwoord beheersysteem voor de GNOME desktop" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Ongekende foutmelding" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Een ongekende fout is opgetreden. Gelieve deze fout en huidige activiteit te " "melden aan de Revelation ontwikkelaars. U kan deze sessie van Revelation " "verder gebruiken, maar het kan onbetrouwbaar zijn." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Wachtwoord Controleur" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Geef een wachtwoord in om te controleren" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Controle resultaten" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Wachtwoord is goed bevonden" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Het wachtwoord %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Wachtwoord Generator" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Het Gegeneerde wachtwoord" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Lengte" #: src/lib/entry.py:170 msgid "Folder" msgstr "Map" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kredietkaart" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Cryptische Sleutel" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Databank" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Deurslot" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Email" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Generiek" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefoon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Extern Bureaublad" #: src/lib/entry.py:355 msgid "Website" msgstr "Webstek" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kaart nummer" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Het kredietkaartnummer, meestal een 16-cijferig nummer." #: src/lib/entry.py:438 msgid "Card type" msgstr "Kaart type" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Type kaart, zoals MasterCard of VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV nummer" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Een Kredietkaart controlenummer, meestal een 3 delige code op de achterkant " "van de kaart" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificaat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Een certificaat, zoals het X.509 SSL-certificaat" #: src/lib/entry.py:474 msgid "Code" msgstr "Kode" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Een code die gebruikt wordt om toegang tot iets te verlenen" #: src/lib/entry.py:487 msgid "A database name" msgstr "Een databank naam" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domein" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Een internet- of aanmeldingsdomein, zoals organisation.org of een Windows-" "aanmeldingsdomein" #: src/lib/entry.py:511 msgid "An email address" msgstr "Een email adres" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Vervaldatum" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "De maand dat de credit card verloopt" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Hostnaam" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "De computernaam, zoals computer.domain.com of MIJNCOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "Sleutelbestand" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Een sleutelbestand dat wordt gebruikt voor verificatie, bijvoorbeeld via ssh " "of voor het coderen van X.509-certificaten" #: src/lib/entry.py:558 msgid "Location" msgstr "Locatie" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Een fysische lokatie, bv. ingang buro" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Een geheime woord- of tekencombinatie die wordt gebruikt om aan te tonen dat " "je toegang hebt" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefoon nummer" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Een telefoon nummer" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Een persoonlijk identificatienummer, een numerieke code die wordt gebruikt " "voor creditcards, telefoons enz" #: src/lib/entry.py:606 msgid "Port number" msgstr "Poort nummer" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" "Een netwerkpoortnummer, gebruikt om rechtstreeks toegang te krijgen tot " "netwerkservices" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Een Uniform Resource Locator, zoals een websiteadres" #: src/lib/entry.py:630 msgid "Username" msgstr "Gebruikersnaam" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "" "Een naam of andere identificatie die wordt gebruikt om uzelf te identificeren" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Doorgaan" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exporteren" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Genereer" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importeren" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Item Toevoegen" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Map Toevoegen" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Aanpassen" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Herladen" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Vervangen" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Ontgrendelen" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Bijwerken" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Negeren" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Vergrendelen" #: src/lib/ui.py:114 msgid "Next" msgstr "Volgende" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Controleren" #: src/lib/ui.py:119 msgid "Previous" msgstr "Vorige" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Ongekend" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Wachtwoord kopiëren" #: src/lib/ui.py:628 msgid "Select File" msgstr "Bestand selecteren" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Bladeren..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Genereer" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notities:" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "%s geleden aangepast" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Zoekopdracht voor" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Elk type" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Vind de vorige overeenkomst" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Vind de volgende overeenkomst" #: src/lib/util.py:48 msgid "is too short" msgstr "is te kort" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "is niet gevarieerd genoeg" #: src/lib/util.py:83 msgid "is too weak" msgstr "is te zwak" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "is een palindroom" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i seconden" #: src/lib/util.py:348 msgid "years" msgstr "jaren" #: src/lib/util.py:348 msgid "year" msgstr "jaar" #: src/lib/util.py:356 msgid "months" msgstr "maanden" #: src/lib/util.py:356 msgid "month" msgstr "maand" #: src/lib/util.py:360 msgid "weeks" msgstr "weken" #: src/lib/util.py:360 msgid "week" msgstr "week" #: src/lib/util.py:364 msgid "days" msgstr "dagen" #: src/lib/util.py:364 msgid "day" msgstr "dag" #: src/lib/util.py:368 msgid "hours" msgstr "uren" #: src/lib/util.py:368 msgid "hour" msgstr "uur" #: src/lib/util.py:372 msgid "minute" msgstr "minuut" #: src/lib/util.py:376 msgid "seconds" msgstr "seconden" #: src/lib/util.py:376 msgid "second" msgstr "seconde" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation account lijst" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Accountslijst" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Aangemaakt:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation versie:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Bestand op te openen wanneer Revelation wordt gestart" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Wachtwoord Beheersysteem" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Organiseer en beveilig uw wachtwoorden" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Het account bewerken bij dubbelklikken" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Bestand openen bij het opstarten:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Bestand openen bij het opstarten:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Bestand vergrendelen wanneer inactief gedurende" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Gegevens automatisch opslaan na wijzigingen" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Gegevensbestand automatisch opslaan als een item is toegevoegd, aangepast of " "verwijderd." #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Lengte van de gegenereerde wachtwoorden" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Het aantal karakters in een wachtwoord - 8 of meer worden aangeraden" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Gebruik leestekens voor wachtwoorden" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Gebruik leestekens voor wachtwoorden" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Toon _Wachtwoorden" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Werkbalkstijl" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Wachtwoorden" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Nieuwe map aanmaken" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Open een bestand" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Geef wachtwoord voor bestand in" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Huidige wachtwoord" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nieuw wachtwoord" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Wachtwoord Generator" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Geen wachtwoord ingegeven" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Item bewerken" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Wachtwoord kopiëren" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Bestand selecteren" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Knip items" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_Niets selecteren" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Geen wachtwoord ingegeven" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Zoekopdracht voor" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Vind de volgende overeenkomst" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Vind de vorige overeenkomst" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Algemeen" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "_Afsluiten" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Bestand" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nieuw" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Bewaar _als..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Verander _Wachtwoord" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Sluiten" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Afsluiten" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Kni_p" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Copieer" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Copieer Wacht_woord" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Plakken" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Selecteer Alles" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Niets selecteren" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Zoek..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Zoek Vo_lgende" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "_Vorige zoeken" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Voorkeu_ren" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "_Item" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Item Toevoegen..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Map _Toevoegen" #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Beeld" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Hoofdwerkbalk" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Zo_ekwerkbalk" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Statusbalk" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Genereer Wachtwoord" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Wachtwoord _Controleur" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Toon _Wachtwoorden" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Hulp" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Over" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Geen overeenkomst gevonden" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "Geen overeenkomsten gevonden voor '%s'. Probeer een andere zoekopdracht." #~ msgid " Find:" #~ msgstr "Zoek:" #~ msgid "The type of account to search for" #~ msgstr "Het type account om op te zoeken" revelation-revelation-0.5.5/po/pl.po000066400000000000000000001524531423125252400174420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Lorem Ipsum , 2014 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Polish (http://www.transifex.com/hey_neken/revelation/" "language/pl/)\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=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" #: src/revelation.py:84 msgid "Missing data files" msgstr "Brakujące pliki danych" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Niektóre pliki systemowe programu Revelation nie mogły być odnalezione, " "proszę ponownie zainstalować Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Brak danych konfiguracyjnych" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Program Revelation nie mógł odnaleźć swoich plików konfiguracyjnych, proszę " "ponownie zainstalować program." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Niewłaściwe pliki danych" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Niektóre pliki systemowe Revelation zawierają niewłaściwe dane, proszę " "ponownie zainstalować program." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "Otwórz" #: src/revelation.py:432 msgid "Open a file" msgstr "Otwórz plik" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "Zapisz" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Zapisz dane do pliku" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Dodaj zapis" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Utwórz nowy zapis" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Dodaj katalog" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Utwórz nowy katalog" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "Idź do" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Idź do wybranych zapisów" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "Edycja" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Modyfikuj wybrany zapis" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Usuń" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Usuń zaznaczone zapisy" #: src/revelation.py:610 msgid "New file" msgstr "Nowy plik" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "Cofnij" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "Cofnij %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "Powtórz" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "Powtórz %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Otwieranie anulowane" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Znaleziono dopasowania do \"%s\"" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Nie znaleziono dopasowań do \"%s\"" #: src/revelation.py:1108 msgid "Old file format" msgstr "Stary format pliku" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation wykrył, że plik \"%s\" jest w starym i obecnie niewspieranym " "formacie. Mocno zaleca się zapisanie tego pliku w nowym formacie. Revelation " "robi to automatycznie po naciśnięciu przycisku zapisywania." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Nieprawidłowe hasło" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Wprowadzone hasło do pliku \"%s\" było nieprawidłowe." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Otwieranie nieudane" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Niewłaściwy format pliku" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Plik \"%s\" zawiera niewłaściwe dane." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Nieznane dane" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Plik \"%s\" zawiera nieznane dane. Mógł zostać utworzony w nowszej wersji " "programu Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Nieznana wersja danych" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Plik \"%s\" ma przyszły numer wersji, proszę uaktualnić program Revelation " "aby go otworzyć." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Nie można wykryć typu pliku." #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Typ pliku \"%s\" nie mógł być automatycznie wykryty. Spróbuj podać typ pliku " "ręcznie." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Nie można otworzyć pliku" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Plik \"%s\" nie mógł być otwarty. Upewnij się, że plik istnieje oraz czy " "posiadasz uprawnienia do odczytu." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Zapis nie posiada hasła do skopiowania" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Hasło skopiowane do schowka" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Zapisy skopiowane" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Wytnij zapisy" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Zapisy wycięte" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Wklej zapisy" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Zapisy wklejone" #: src/revelation.py:1261 msgid "Add entry" msgstr "Dodaj zapis" #: src/revelation.py:1267 msgid "Entry added" msgstr "Zapis dodany" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Dodawanie zapisu anulowane" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Modyfikuj katalog" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Modyfikuj zapis" #: src/revelation.py:1295 msgid "Update entry" msgstr "Uaktualnij zapis" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Zapis uaktualniony" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Modyfikacja zapisu anulowana" #: src/revelation.py:1330 msgid "Folder added" msgstr "Katalog dodany" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Dodawanie katalogu anulowane" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Nie znaleziono polecenia idź do w %s zapisach" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Zapis otwarty" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Niewłaściwy format polecenia idź do" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "Polecenie idź do jest niewłaściwe w %s zapisach, proszę je poprawić w " "preferencjach." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Brak danych zapisu" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" "Zapis \"%s\" nie posiada wszystkich danych wymaganych do jego otwarcia." #: src/revelation.py:1397 msgid "Move entry" msgstr "Przemieść zapis" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Zapisy przemieszczone" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Usuń zapis" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Zapisy usunięte" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Usuwanie zapisu anulowane" #: src/revelation.py:1455 msgid "Password changed" msgstr "Zmieniono hasło" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Zmiana hasła anulowana" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Otwarto plik %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Anulowana utworzenie nowego pliku" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Dane wyeksportowane do %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Eksport anulowany" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Nie można zapisać do pliku" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Plik \"%s\" nie mógł być otwarty do zapisu. Upewnij się, że masz właściwe " "uprawnienia do jego zapisywania." #: src/revelation.py:1503 msgid "Export failed" msgstr "Eksport nieudany" #: src/revelation.py:1519 msgid "Import data" msgstr "Importuj dane" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Dane zaimportowane z %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Import anulowany" #: src/revelation.py:1560 msgid "Locked" msgstr "Zablokowany" #: src/revelation.py:1561 msgid "File locked" msgstr "Plik zablokowany" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Wyjście zablokowane ze względu na niezapisane zmiany" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Plik odblokowany" #: src/revelation.py:1609 msgid "New file created" msgstr "Utworzono nowy plik" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Anulowana utworzenie nowego pliku" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Otwarto plik %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Dane zapisane do pliku %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Zapis anulowany" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Nie można zapisać pliku" #: src/revelation.py:1666 msgid "Save failed" msgstr "Zapis nieudany" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Wyjście anulowane" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s powtórzone" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s cofnięte" #: src/revelation.py:1745 msgid "Preferences" msgstr "Preferencje" #: src/revelation.py:1754 msgid "General" msgstr "Ogólne" #: src/revelation.py:1758 msgid "Interface" msgstr "Interfejs" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Polecenia idź do" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Akcja podwójnego kliknięcia" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Idź do, jeśli możłiwe" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Idź do (otwórz w zewnętrznej aplikacji) po podwójnym kliknięciu, jeśli " "wypełnione jest odpowiednie pole zapisu" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Modyfikuj" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Modyfikuj po podwójnym kliknięciu" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Skopiuj hasło do schowka" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiuje hasło zapisu do schowka po podwójnym kliknięciu" #: src/revelation.py:1803 msgid "Files" msgstr "Pliki" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Otwórz plik przy uruchomieniu:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Jeśli zaznaczone, plik będzie otwierany podczas uruchamiania programu" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Wybierz plik do automatycznego otwierania" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Pliki Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Wszystkie pliki" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Plik do otwarcia podczas uruchomienia Revelation" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Zapisuj automatycznie dane, które zostały zmienione" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Automatycznie zapisuje dane do pliku, kiedy dodano, zmodyfikowano lub " "usunięto zapis" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Zablokuj plik jeśli jest nieaktywny przez" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" "Automatycznie blokuje plik danych jeśli był nieaktywny przez przedział czasu" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Czas bezczynności przed zablokowaniem pliku, w minutach" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minut" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "Polecenie idź do dla zapisów %s. Mogą być użyte poniższe zmienne:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: znak \"%\"" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: opcjonalna zmienna" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): opcjonalny podciąg znaków" #: src/revelation.py:1895 msgid "Passwords" msgstr "Hasła" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Wyświetlaj hasła oraz inne wrażliwe dane" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Wyświetla hasła oraz inne wrażliwe dane, takie jak kody PIN (w przeciwnym " "razie ukrywa za pomocą znaków ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Skopiuj także nazwę użytkownika podczas kopiowania hasła" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "Kiedy hasło kopiowane jest do schowka, umieść nazwę użytkownika przed hasłem " "jako tzw. łańcuch schowka" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Użyj znaków interpunkcyjnych w hasłach" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Podczas generowania hasła, użyj znaków interpunkcyjnych takich jak %, =, " "{ lub ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Liczba znaków generowanych haseł - zaleca się 8 lub więcej" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Długość generowanych haseł" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Styl paska narzędzi" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Użyj domyślnego ze środowiska" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Pokazuje elementy paska narzędzi w stylu domyśłnym" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Pokazuj ikony i tekst" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" "Pokazuje elementy paska narzędziowego jednocześnie za pomocą ikon i tekstu" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Pokazuj ikony i ważne teksty" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Pokazuje elementy paska narzędzi z tekstem obok ważnych ikon" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Pokazuj tylko ikony" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Pokazuje elementy paska narzędziowego tylko za pomocą ikon" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Pokazuj tylko tekst" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Pokazuje elementy paska narzędziowego tylko za pomocą tekstu" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Prawa autorskie" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Plik został zmieniony" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Bieżący plik \"%s\" został zmieniony. Czy chcesz go przeładować?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Zapisać zmiany do bieżącego pliku?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Zrobiono zmiany, które nie zostały zapisane. Jeśli utworzysz nowy plik bez " "zapisania to zmiany te zostaną utracone." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Zapisać zmiany przed otwarciem?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Zrobiono zmiany, które nie zostały zapisane. Jeśli otworzysz inny plik bez " "zapisania to zmiany te zostaną utracone." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Zapisać zmiany przed wyjściem?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Zrobiono zmiany, które nie zostały zapisane. Jeśli wyjdziesz bez zapisania " "to zmiany te zostaną utracone." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Zapisać zmiany przed otwarciem?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Zrobiono zmiany, które nie zostały zapisane. Jeśli wyjdziesz bez zapisania " "to zmiany te zostaną utracone." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Zastąpić istniejący plik?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Plik \"%s\" już istnieje - czy chcesz go zastąpić?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Zapisać do niezabezpieczonego pliku?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Zapisujesz swoje hasła do niezabezpieczonego (nieszyfrowanego) formatu pliku " "- jeśli ktokolwiek wejdzie w posiadanie tego pliku to będzie mógł odczytać " "twoje hasła." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Wybierz plik do eksportu" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Typ pliku" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Wybierz plik do importu" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Wykryj automatycznie" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Wybierz plik do otwarcia" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Wybierz plik do zapisu" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Wprowadź nowe hasło" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Wprowadź nowe hasło do bieżącego pliku danych. Plik musi zostać zapisany aby " "nowe hasło zostało zaaplikowane." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Aktualne hasło" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nowe hasło" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Potwierdź hasło" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Hasło wprowadzone jako aktualne jest nieprawidłowe." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Hasła nie pasują" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Wprowadzone hasło i jego potwierdzenie nie pasują." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Użyć słabego hasła?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Wprowadzone hasło nie jest bezpieczne; %s. Czy na pewno chcesz go użyć?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Wprowadź hasło aby odblokować plik" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Bieżący plik został zablokowany, wprowadź hasło tego pliku aby go odblokować." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Hasło" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Wprowadzone hasło jest nieprawidłowe, spróbuj ponownie." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Wprowadź hasło" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "Plik \"%s\" jest zaszyfrowany. Wprowadź hasło aby go otworzyć." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Wprowadź hasło pliku." #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Wprowadź hasło do pliku \"%s\". To hasło będzie potrzebne przy otwieraniu " "tego pliku w przyszłości." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Wprowadzone hasła nie pasują." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Nie wprowadzono hasła" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Należy wprowadzić hasło do nowego pliku danych." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Dane konta" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notatki" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Nazwa zapisu" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nazwa" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Opis zapisu" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Opis" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Typ zapisu" #: src/lib/dialog.py:859 msgid "Type" msgstr "Typ" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notatki zapisu" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nazwa nie wprowadzona" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Należy podać nazwę zapisu" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Czy na pewno usunąć %i zaznaczone zapisy?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Poprzez usunięcie tych zapisów usuniesz również zapisy, które mogą się w " "nich zawierać." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Czy na pewno usunąć katalog \"%s\"?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Poprzez usunięcie tego katalogu usuniesz również wszystkie katalogi i " "zapisy, które mogą się w nim zawierać." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Czy na pewno usunąć zapis \"%s\"?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Proszę potwierdzić chęć usunięcia tego zapisu." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Nazwa katalogu" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Opis katalogu" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Należy podać nazwę katalogu" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Menedżer haseł GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Nieznany błąd" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Wystąpił nieznany błąd. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Sprawdzanie haseł" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Wprowadź hasło do sprawdzenia" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Wynik sprawdzenia" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Hasło wygląda dobrze" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Hasło %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Generator haseł" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Wygenerowane hasło" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Długość" #: src/lib/entry.py:170 msgid "Folder" msgstr "Katalog" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Karta kredytowa" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Klucz" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Baza danych" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Blokada drzwi" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "E-mail" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Ogólny" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Powłoka" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Zdalny pulpit" #: src/lib/entry.py:355 msgid "Website" msgstr "Strona www" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Numer karty" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Numer karty kredytowej, zazwyczaj 16-cyfrowy" #: src/lib/entry.py:438 msgid "Card type" msgstr "Typ karty" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ karty kredytowej, np. MasterCard lub VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "numer CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Numer weryfikacyjny karty, zazwyczaj 3-cyfrowy, można go znaleźć na odwrocie " "karty" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certyfikat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Certyfikat, np. X.509 " #: src/lib/entry.py:474 msgid "Code" msgstr "Kod" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Kod dający dostęp do czegoś" #: src/lib/entry.py:487 msgid "A database name" msgstr "Nazwa bazy danych" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domena" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "Domena logowania lub adres internetowy, tylu organizacja.pl" #: src/lib/entry.py:511 msgid "An email address" msgstr "Adres e-mail" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Data wygaśnięcia" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Miesiąc wygaśnięcia ważności karty" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Nazwa hosta" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Nazwa komputera, np. domena.pl lub MÓJKOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "Plik klucza" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Plik klucza, używany do autentykacji, np. poprzez ssh do odszyfrowania " "certyfikatów X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Położenie" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Położenie fizyczne, np. wejście do biura" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "Tajemne słowo lub ciąg znaków używanych do udowodnienia dostępu" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Numer telefonu" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Numer telefonu" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Kod identyfikacyjny, numeryczny kod używany do kart płatniczych, telefonów " "itp." #: src/lib/entry.py:606 msgid "Port number" msgstr "Numer portu" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Numer portu sieciowego, używany do bezpośredniej łączności" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "and. Uniform Resource Locator, np. adres strony www" #: src/lib/entry.py:630 msgid "Username" msgstr "Nazwa użytkownika" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Nazwa lub inna informacja identyfikacyjna" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "Dalej" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "Eksport" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "Wygeneruj" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "Import" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "Dodaj zapis" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "Dodaj katalog" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "Zmień" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "Przeładuj" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "Zastąp" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "Odblokuj" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "Uaktualnij" #: src/lib/ui.py:104 msgid "_Discard" msgstr "Anuluj" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "Zablokuj" #: src/lib/ui.py:114 msgid "Next" msgstr "Następny" #: src/lib/ui.py:116 msgid "_Check" msgstr "Sprawdź" #: src/lib/ui.py:119 msgid "Previous" msgstr "Poprzedni" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Nieznany" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Skopiuj hasło" #: src/lib/ui.py:628 msgid "Select File" msgstr "Wybierz plik" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Przeglądaj..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Wygeneruj" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notatki:" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Uaktualniono %s temu" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Fraza wyszukiwania" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Każdy typ" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Wyszukaj poprzednie dopasowanie" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Wyszukaj następne dopasowanie" #: src/lib/util.py:48 msgid "is too short" msgstr "jest za krótkie" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "zbyt mało różnorodne" #: src/lib/util.py:83 msgid "is too weak" msgstr "za słabe" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "jest palindromem" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekund" #: src/lib/util.py:348 msgid "years" msgstr "lat" #: src/lib/util.py:348 msgid "year" msgstr "rok" #: src/lib/util.py:356 msgid "months" msgstr "miesięcy" #: src/lib/util.py:356 msgid "month" msgstr "miesiąc" #: src/lib/util.py:360 msgid "weeks" msgstr "tygodni" #: src/lib/util.py:360 msgid "week" msgstr "tydzień" #: src/lib/util.py:364 msgid "days" msgstr "dni" #: src/lib/util.py:364 msgid "day" msgstr "dzień" #: src/lib/util.py:368 msgid "hours" msgstr "godzin" #: src/lib/util.py:368 msgid "hour" msgstr "godzina" #: src/lib/util.py:372 msgid "minute" msgstr "minuta" #: src/lib/util.py:376 msgid "seconds" msgstr "sekund" #: src/lib/util.py:376 msgid "second" msgstr "sekunda" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Lista zapisów Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Lista zapisów" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Utworzono:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Wersja Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Plik do otwarcia podczas uruchomienia Revelation" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Menedżer haseł" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Uporządkuj i zabezpiecz swoje hasła" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Modyfikuj po podwójnym kliknięciu" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Otwórz plik przy uruchomieniu:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Otwórz plik przy uruchomieniu:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Zablokuj plik jeśli jest nieaktywny przez" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Zapisuj automatycznie dane, które zostały zmienione" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Automatycznie zapisuje dane do pliku, kiedy dodano, zmodyfikowano lub " "usunięto zapis" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Długość generowanych haseł" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Liczba znaków generowanych haseł - zaleca się 8 lub więcej" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Użyj znaków interpunkcyjnych w hasłach" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Użyj znaków interpunkcyjnych w hasłach" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "New password" msgid "Show passwords" msgstr "Nowe hasło" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Styl paska narzędzi" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Hasła" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Utwórz nowy katalog" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Otwórz plik" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Wprowadź hasło pliku." #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Aktualne hasło" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nowe hasło" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Generator haseł" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Nie wprowadzono hasła" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Modyfikuj zapis" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Skopiuj hasło" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Wybierz plik" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Wytnij zapisy" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "Go to the selected entries" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Idź do wybranych zapisów" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Nie wprowadzono hasła" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Fraza wyszukiwania" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Wyszukaj następne dopasowanie" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Wyszukaj poprzednie dopasowanie" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Ogólne" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Nic nie znaleziono" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "Fraza \"%s\" nie pasuje do żadnego zapisu. Spróbuj innej wyszukać inne " #~ "wyrazy." #~ msgid " Find:" #~ msgstr "Znajdź:" #~ msgid "The type of account to search for" #~ msgstr "Typ zapisów do wyszukania" revelation-revelation-0.5.5/po/pt_BR.po000066400000000000000000001552251423125252400200350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Joacelio Moura de Lucena , 2012-2013,2015,2020 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/hey_neken/" "revelation/language/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Arquivos de dados omissos" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Um dos arquivos de sistema do Revelation não foram encontrados, por favor " "reinstale o Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Configuração de dados omissa" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "O Revelantion não pode encontrar seus dados de configuração, por favor " "reinstale o Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Arquivos de dados inválidos" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Alguns arquivos de sistema do Revelation contém dados inválidos, por favor " "reinstale o Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Abrir" #: src/revelation.py:432 msgid "Open a file" msgstr "Abrir um arquivo" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Salvar" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Salvar dados em um arquivo" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Adicionar Entrada" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Criar uma nova entrada" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Adiciona pasta" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Criar uma nova pasta" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Ir" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Ir para as entradas selecionadas" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Editar" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Editar uma entrada selecionada" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Re_mover" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Remover as entradas selecionadas" #: src/revelation.py:610 msgid "New file" msgstr "Novo arquivo" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Desfazer" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Desfazer %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Refazer" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Refazer %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Abertura cancelada" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Correspondência encontrada para '%s'" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Nenhuma correspondência encontrada para '%s'" #: src/revelation.py:1108 msgid "Old file format" msgstr "Formato de arquivo antigo" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "O Revelation detectou que o arquivo '%s' tem formato antigo e de fato " "inseguro. É fortemente recomendado salvar este arquivo com o novo formato. O " "Revelation fará isso automaticamente se você pressionar salvar após a " "abertura do arquivo." #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Senha incorreta" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "A senha que você informou para o arquivo '%s' não era correta." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Abertura falhou" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Formato de aquivo inválido" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "O arquivo '%s' contém dados inválidos" #: src/revelation.py:1124 msgid "Unknown data" msgstr "Dados desconhecidos" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "O arquivo '%s' contém dados desconhecidos. Ele pode ter sido criado com uma " "versão mais nova do Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Versão desconhecida de dados" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "O arquivo '%s' tem um número de versão futura, por favor atualize o " "Revelation para abrí-lo." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Incapaz de detectar o tipo de arquivo" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "O tipo de arquivo de '%s' não pôde ser detetado automaticamente. Tente " "especificar o tipo de arquivo manualmente." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Incapaz de abrir arquivo" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "O arquivo '%s' não pôde ser aberto. Tenha certeza que ele existe e que você " "tenha permissões para abri-lo." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "A entrada não possui senha a ser copiada" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Senha copiada para a área de transferência" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Entradas copiadas" #: src/revelation.py:1217 msgid "Cut entries" msgstr " Corta entradas" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Entradas cortadas" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Cola entradas" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Entradas coladas" #: src/revelation.py:1261 msgid "Add entry" msgstr "Adicionar Entrada" #: src/revelation.py:1267 msgid "Entry added" msgstr "Entrada adicionada" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Adição de entrada cancelada" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Edita Pasta" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Edita entrada" #: src/revelation.py:1295 msgid "Update entry" msgstr "Atualiza entrada" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Entrada atualizada" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Edição de entrada cancelada" #: src/revelation.py:1330 msgid "Folder added" msgstr "Pasta adicionada" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Adição de pasta cancelada" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Nenhum comando \"ir para\" encontrado para as entradas %s" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Entrada aberta" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Formato inválido do comando \"ir para\"" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "O comando \"ir para\" para as entradas '%s' é inválido, por favor corrija-o " "nas preferências." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Entrada de dados omissa" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "A entrada '%s' não tem todos os dados requeridos para abrí-la." #: src/revelation.py:1397 msgid "Move entry" msgstr "Move entradas" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Entradas movidas" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Remove entrada" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Entradas removidas" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Remoção de entrada cancelada" #: src/revelation.py:1455 msgid "Password changed" msgstr "Senha alterada" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Alteração de senha cancelada" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Arquivo aberto %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Novo arquivo cancelado" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Dados exportados para '%s'" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Exportação cancelada" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Incapaz de escrever no arquivo" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "O arquivo '%s' não pôde ser aberto para escrita. Tenha certeza de que você " "possui permissões apropriadas para escrever nele." #: src/revelation.py:1503 msgid "Export failed" msgstr "Exportação falhou" #: src/revelation.py:1519 msgid "Import data" msgstr "Importa dados" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Dados importados de %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Importação cancelada" #: src/revelation.py:1560 msgid "Locked" msgstr "Bloqueado" #: src/revelation.py:1561 msgid "File locked" msgstr "Arquivo bloqueado" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Saída desabilitada devido a alterações não-salvas" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Arquivo desbloqueado" #: src/revelation.py:1609 msgid "New file created" msgstr "Novo arquivo criado" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Novo arquivo cancelado" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Arquivo aberto %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Dados salvos no arquivo %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Salvamento cancelado" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Incapaz de salvar arquivo" #: src/revelation.py:1666 msgid "Save failed" msgstr "Salvamento falhou" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Saída cancelada" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s refeito" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s desfeito" #: src/revelation.py:1745 msgid "Preferences" msgstr "Preferências" #: src/revelation.py:1754 msgid "General" msgstr "Geral" #: src/revelation.py:1758 msgid "Interface" msgstr "Interface" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Comandos \"Ir para\"" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Ação de duplo clique" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Vai para conta, se possível" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Vai para a conta (abre uma aplicação externa) com um duplo clique, se os " "dados requeridos estiverem preenchidos" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Edita conta" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Edita a conta com duplo clique" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Copia a senha para a área de transferência" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia a senha da conta para a área de transferência com duplo clique" #: src/revelation.py:1803 msgid "Files" msgstr "Arquivos" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Abrir arquivo ao iniciar:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" "Quando habilitado, este arquivo será aberto quando o programa for iniciado" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Selecione Arquivo para Abrir Automaticamente" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Arquivos Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Todos os arquivos" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Arquivo a ser aberto quando o Revelation for iniciado" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Salvar automaticamente os dados quando alterados" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Automaticamente salva os dados quando uma entrada é adicionada, modificada " "ou removida" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Bloquear arquivo quando estiver inativo" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" "Automaticamente bloqueia o arquivo de dados após um período de inatividade" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "O período de inatividade antes de bloquear o arquivo, em minutos" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minutos" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Comando Vá para contas %s. As seguintes variáveis de expansão podem ser " "usadas:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: um símbolo \"%\"" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: variável de expansão opcional" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): subpalavra de expansão opcional" #: src/revelation.py:1895 msgid "Passwords" msgstr "Senhas" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Exibe senhas e outros segredos" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Exibe senhas e outros segredos, tais quais códigos PIN (do contrário, " "esconde-os com ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Também copia o nome de usuário quando copiar a senha" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "Quando a senha é copiada para a área de transferência, o nome de usuário é " "posto antes da senha como uma \"sequência\" da área de transferência" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Use caracteres de pontuação para as senhas" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Quando as senhas são geradas, usa caracteres de pontuação como %, =, { ou ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "O número de caracteres na senha gerada - 8 ou mais é recomendado" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Comprimento das senhas geradas" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Estilo da barra de ferramentas" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Usar padrão do desktop" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Exibe itens da barra de ferramentas com o estilo padrão" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Exibir ícones e texto" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Exibe itens da barra de ferramentas com ambos ícones e texto" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Exibir ícones e texto importante" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" "Exibe ítens da barra de ferramentas com o texto junto de ícones importantes" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Exibir apenas ícones" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Exibe itens da barra de ferramentas com ícones apenas" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Exibir apenas texto" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Exibe itens da barra de ferramentas com texto apenas" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Direitos Autorais" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Arquivo alterado" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "O arquivo atual '%s' foi alterado. Você deseja recarregá-lo?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Salvar alterações no arquivo atual?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Você fez alterações que não foram salvas. Se você criar um novo arquivo sem " "salvar estas alterações serão perdidas." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Salvar alterações antes de abrir?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Você fez alterações que não foram salvas. Se você abrir um arquivo diferente " "sem salvar, então estas alterações serão perdidas." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Salvar alterações antes de sair?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Você tem alterações que ainda não foram salvas. Se você terminar sem salvar, " "estas alterações serão perdidas." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Salvar alterações antes de abrir?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Você tem alterações que ainda não foram salvas. Se você terminar sem salvar, " "estas alterações serão perdidas." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Substituir arquivo existente?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "O arquivo '%s' já existe - você quer substituir este arquivo?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Salvar em arquivo inseguro?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Você escolheu salvar suas senhas em um formato de arquivo inseguro (não-" "cifrado) - se alguém tiver acesso a este arquivo, ele será capaz de ver suas " "senhas." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Selecione Arquivo para Exportar" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Tipo de arquivo" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Selecione Arquivo para Importar" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Detectar automaticamente" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Selecione Arquivo para Abrir" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Selecione Arquivo para Salvar" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Digite nova senha" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Informe uma nova senha para o arquivo de dados atual. O arquivo deve ser " "salvo antes da nova senha ser aplicada." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Senha atual" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nova senha" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Confirmação de senha" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "A senha que você informou como senha do arquivo atual está incorreta" #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Senhas não combinam" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "A senha e a confirmação de senha que você informou não combinam." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Usar senha insegura?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "A senha que você informou não é segura; %s. Você tem certeza que deseja usá-" "la?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Informe senha para desbloquear arquivo" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "O arquivo atual foi bloqueado, por favor informe a senha do arquivo para " "desbloquea-lo." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Senha" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "A senha que você informou não era correta, por favor tente novamente." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Informe a senha do arquivo" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "O arquivo '%s' está criptografado. Por favor informe a senha do arquivo para " "abri-lo." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Informe a senha para o arquivo" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Por favor informe uma senha para o arquivo '%s'. Você precisará desta senha " "para abrir o arquivo mais tarde." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "As senhas que você informou não combinam" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Nenhuma senha informada" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Você deve informar uma senha para o novo arquivo de dados." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Dados da conta" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Notas" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "O nome da entrada" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Nome" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Uma descrição da entrada" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Descrição" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "O tipo da entrada" #: src/lib/dialog.py:859 msgid "Type" msgstr "Tipo" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Notas para a entrada" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Nome não informado" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Você deve informar um nome para a conta" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Remover realmente as %i entradas seleciondas?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Ao remover estas entradas você também removerá quaisquer entradas que elas " "contenham." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Remover realmente a pasta '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Ao remover esta pasta você também removerá todas as contas e pastas que ela " "contiver." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Remover realmente a conta '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Por favor confirme que você deseja remover esta conta." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "O nome da pasta" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Uma descrição da pasta" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Você deve digitar um nome para a pasta" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Um gestor de senhas para o desktop GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Erro desconhecido" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Um erro desconhecido ocorreu. Por favor relate o texto abaixo aos " "desenvolvedores do Revelation, juntamente com o que você estava fazendo que " "possa ter causado o erro. Você pode tentar continuar executando o " "Revelation, mas ele pode ter comportamento inesperado." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Verificador de senha" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Digite uma senha para ser verificada" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "O resultado da verificação" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "A senha parece ser boa" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "A senha %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Gerador de Senha" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "A senha gerada" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Comprimento" #: src/lib/entry.py:170 msgid "Folder" msgstr "Pasta" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Cartão de Crédito" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Chave de Criptografia" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Banco de Dados" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Trava de Porta" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Email" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Genérica" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefone" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Desktop Remoto" #: src/lib/entry.py:355 msgid "Website" msgstr "Sítio Web" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Número de cartão" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "O número de um cartão de crédito, normalmente um número de 16 dígitos" #: src/lib/entry.py:438 msgid "Card type" msgstr "Tipo de cartão" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "O tipo de cartão de crédito, como MasterCard ou VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Um número de Verificação de Cartão de Crédito, CCV, normalmente um código de " "3 dígitos encontrado na parte de trás de um cartão" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certificado" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Um certificado, tal qual um Certificado SSL X.509" #: src/lib/entry.py:474 msgid "Code" msgstr "Código" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Um código usado para fornecer acesso a algo" #: src/lib/entry.py:487 msgid "A database name" msgstr "Um nome de banco de dados" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domínio" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Um domínio de logon ou Internet, tal qual organizacao.org.br ou um domínio " "de logon do Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Um endereço de email" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Data de expiração" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "O mês em que a validade do cartão de crédito expira" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" "O nome de um computador, tal qual computador.dominio.com.br ou MEUCOMPUTADOR" #: src/lib/entry.py:546 msgid "Key File" msgstr "Arquivo de Chave" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Um arquivo de chave, usado para autenticação por exemplo via ssh ou para " "criptografar certificados X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Local" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Um local físico, tal qual a entrada do escritório" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Uma palavra secreta ou combinação de caracteres usados para provar que você " "tem acesso" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Número de telefone" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Um número de telefone" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Um Número de Identificação Pessoal, PIN, um código numérico usado para " "cartões de crédito, telefones, etc" #: src/lib/entry.py:606 msgid "Port number" msgstr "Número da porta" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" "Um número de porta de rede usado para obter acesso a serviços de rede " "diretamente" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" "Um Localizador Uniforme de Recurso, tal qual um endereço de sítio da web" #: src/lib/entry.py:630 msgid "Username" msgstr "Nome de usuário" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Um nome ou outra identificação usada para se identificar" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Continuar" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "Exportar" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Gerar" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importar" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Adicionar Entrada" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Adicionar Pasta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Alterar" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Recarregar" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Substituir" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Desbloquear" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "At_ualizar" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Descartar" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Bloquear" #: src/lib/ui.py:114 msgid "Next" msgstr "Próximo" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Verificar" #: src/lib/ui.py:119 msgid "Previous" msgstr "Anterior" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Desconhecido" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Copiar senha" #: src/lib/ui.py:628 msgid "Select File" msgstr "Selecionar arquivo" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Navegar..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Gerar" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Notas: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Atualizado há %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Texto a pesquisar" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Qualquer tipo" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Encontrar a combinação anterior" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Encontre a próxima combinação" #: src/lib/util.py:48 msgid "is too short" msgstr "é muito curta" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "não é bastante variada" #: src/lib/util.py:83 msgid "is too weak" msgstr "é muito fraca" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "é um palíndromo" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i segundos" #: src/lib/util.py:348 msgid "years" msgstr "anos" #: src/lib/util.py:348 msgid "year" msgstr "ano" #: src/lib/util.py:356 msgid "months" msgstr "meses" #: src/lib/util.py:356 msgid "month" msgstr "mês" #: src/lib/util.py:360 msgid "weeks" msgstr "semanas" #: src/lib/util.py:360 msgid "week" msgstr "semana" #: src/lib/util.py:364 msgid "days" msgstr "dias" #: src/lib/util.py:364 msgid "day" msgstr "dia" #: src/lib/util.py:368 msgid "hours" msgstr "horas" #: src/lib/util.py:368 msgid "hour" msgstr "hora" #: src/lib/util.py:372 msgid "minute" msgstr "minuto" #: src/lib/util.py:376 msgid "seconds" msgstr "segundos" #: src/lib/util.py:376 msgid "second" msgstr "segundo" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Lista de contas Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Lista de contas" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Criado:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Versão do Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Arquivo a ser aberto quando o Revelation for iniciado" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Gestor de Senhas" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Organize e proteja suas senhas" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Edita a conta com duplo clique" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Abrir arquivo ao iniciar:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Abrir arquivo ao iniciar:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Bloquear arquivo quando estiver inativo" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Salvar automaticamente os dados quando alterados" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Automaticamente salva os dados quando uma entrada é adicionada, modificada " "ou removida" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Comprimento das senhas geradas" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "O número de caracteres na senha gerada - 8 ou mais é recomendado" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Use caracteres de pontuação para as senhas" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Use caracteres de pontuação para as senhas" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Mostra Sen_has" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Estilo da barra de ferramentas" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Senhas" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Criar uma nova pasta" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Abrir um arquivo" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Informe a senha para o arquivo" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Senha atual" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nova senha" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Gerador de Senha" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Nenhuma senha informada" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Edita entrada" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Copiar senha" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Selecionar arquivo" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr " Corta entradas" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_Desselecionar Todas" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Nenhuma senha informada" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Texto a pesquisar" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Encontre a próxima combinação" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Encontrar a combinação anterior" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Geral" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "_Terminar" #: data/ui/menubar.ui:5 msgid "_File" msgstr "Ar_quivo" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Novo" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "S_alvar como..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Alterar _Senha..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "Fe_char" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Terminar" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Recor_tar" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Copiar" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Copiar Sen_ha" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Colar" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Selecionar Todas" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Desselecionar Todas" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Encontrar" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Encontrar Pró_xima" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Encontrar Ante_rior" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Preferê_ncias" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "E_ntrada" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Adicionar Entrada..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Adicionar _Pasta" #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Ver" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Barra de ferramentas principal" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Barra de ferramentas de Pe_squisa" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Barra de status" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Gerador de Senhas" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "_Verificador de Senhas" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Mostra Sen_has" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Ajuda" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Sobre" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Correspondência não encontrada" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "A palavra '%s' não casa com nenhuma entrada. Tente uma busca com uma " #~ "frase diferente." #~ msgid " Find:" #~ msgstr " Encontrar:" #~ msgid "The type of account to search for" #~ msgstr "O tipo de conta a pesquisar" revelation-revelation-0.5.5/po/ru.po000066400000000000000000001717261423125252400174610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Evgeny , 2012 # Evgeny , 2012 # Yuri Myasoedov , 2012 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Russian (http://www.transifex.com/hey_neken/revelation/" "language/ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=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" #: src/revelation.py:84 msgid "Missing data files" msgstr "Отстутствуют файлы данных" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Некоторые файлы Revelation отсутствуют. Переустановите Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Отсутствуют данные конфигурации" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation не может найти данные конфигурации. Переустановите Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Неверные файлы данных" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Некоторые файлы Revelation содержат неверные данные. Переустановите " "Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Открыть" #: src/revelation.py:432 msgid "Open a file" msgstr "Открыть файл" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Сохранить" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Сохранить текущий файл" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Добавить запись" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Добавить новую запись" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Добавление папки" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Добавить новую папку" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Перейти" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Перейти к выделенным записям" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Правка" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Изменение выбранной записи" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "_Удалить" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Удаление выделенных записей" #: src/revelation.py:610 msgid "New file" msgstr "Новый файл" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Отмена" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Отменить %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "П_овтор" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "П_овторить %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Открытие отменено" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Найден фрагмент «%s»" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Текст «%s» не найден" #: src/revelation.py:1108 msgid "Old file format" msgstr "Старый формат файла" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation обнаружил, что формат файла '%s' является устаревшим и " "небезопасным. Настоятельно рекомендуется сохранить данный файл в новом " "формате. Revelation сделает это автоматически при сохранении изменений в " "открытом файле. " #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Неверный пароль" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Указан неверный пароль для файла «%s»." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Ошибка при открытии" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Неверный формат файла" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Файл «%s» содержит неверные данные." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Неизвестные данные" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Файл «%s» содержит нераспознаные данные. Возможно он был создан в другой " "версии Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Неизвестная версия данных" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "У файла «%s» более новая версия. Обновите Revelation, чтобы его открыть." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Не удалось распознать тип файла" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Не удалось автоматически распознать тип данных в файле «%s». Попробуйте " "указать тип вручную." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Не удалось открыть файл" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Не удалось открыть файл «%s». Убедитесь, что файл существует и у вас есть " "соответствующие разрешения." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "У данной записи отсутствует пароль" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Пароль был скопирован в Буфер обмена" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Записи скопированы" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Вырезать записи" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Записи вырезаны" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Вставку записей" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Записи вставлены" #: src/revelation.py:1261 msgid "Add entry" msgstr "Добавление записи" #: src/revelation.py:1267 msgid "Entry added" msgstr "Запись добавлена" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Добавление записи отменено" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Изменение папки" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Изменение записи" #: src/revelation.py:1295 msgid "Update entry" msgstr "Обновить запись" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Запись была обновлена" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Добавление записи отменено" #: src/revelation.py:1330 msgid "Folder added" msgstr "Папка успешно добавлена" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Добавление папки отменено" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Не найдена команда перехода для записей типа %s" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Запись успешно открыта" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Неверный формат команды перехода" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "Команда перехода для записей типа «%s» неверна. Исправьте ее в диалоге " "настроек." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Отсутствуют данные в записи" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "Запись «%s» не содержит достаточно данных для перехода к ней." #: src/revelation.py:1397 msgid "Move entry" msgstr "Перемещение записей" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Записи перемещены" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Удаление записи" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Записи удалены" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Отменено открытие записи" #: src/revelation.py:1455 msgid "Password changed" msgstr "Пароль изменён" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Смена пароля отменена" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Файл %s успешно открыт" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Создание файла отменено" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Успешный экспорт в %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Экспорт отменен" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Не удалось записать данные в файл" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Файл «%s» не удалось открыть для записи. Убедитесь, что у вас есть " "соответствующие разрешения." #: src/revelation.py:1503 msgid "Export failed" msgstr "Ошибка при экспорте" #: src/revelation.py:1519 msgid "Import data" msgstr "Импорт данных" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Данные из %s успешно импортированы" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Импорт был отменен" #: src/revelation.py:1560 msgid "Locked" msgstr "Заблокировано" #: src/revelation.py:1561 msgid "File locked" msgstr "Файл заблокирован" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Выход невозможен из-за несохраненных изменений" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Файл был разблокирован" #: src/revelation.py:1609 msgid "New file created" msgstr "Создан новый файл" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Создание файла отменено" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Файл %s успешно открыт" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Успешное сохранение в файл %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Сохранение отменено" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Не удалось сохранить файл" #: src/revelation.py:1666 msgid "Save failed" msgstr "Не удалось сохранить файл" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Выход отменен" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "Повторено действие: %s" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s отменено" #: src/revelation.py:1745 msgid "Preferences" msgstr "Настройки" #: src/revelation.py:1754 msgid "General" msgstr "Общие" #: src/revelation.py:1758 msgid "Interface" msgstr "Интерфейс" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Команды перехода" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "При двойном щелчке" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Перейти к записи, если возможно" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Перейти к записи (открыть ее во внешнем приложении), если присутствуют " "необходимые данные" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Изменить запись" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Изменять запись по двойному щелчку" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Скопировать пароль" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Копировать пароль по двойному щелчку" #: src/revelation.py:1803 msgid "Files" msgstr "Файлы" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Открывать файл при запуске:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Автоматически открывать файл при запуске" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Выберите начальный файл" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Файлы Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Все файлы" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Файл, который будет открыт при запуске Relevation" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Сохранять файл при изменениях" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Сохранять файл автоматически при добавлении, изменении или удалении записей" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Блокировать файл через" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Автоматически блокировать файл после простоя" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Время простоя до блокировки файла, в минутах" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "мин." #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Команда перехода для записей типа %s. Можно использовать следующие " "переменные:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: необязательная переменная" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): необязательный фрагмент" #: src/revelation.py:1895 msgid "Passwords" msgstr "Пароли" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Отображать пароли и секретные данные" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Показывать пароли и другие секретные данные, например PIN-коды (иначе " "скрывать под звездочками)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Копировать имя пользователя вместе с паролем" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "При копировании пароля также поместить перед ним в очередь имя пользователя" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Используйте символы пунктуации для паролей" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Когда пароль сгенерирован, используйте символы пунктуации %, =, { или ." #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Число символов в создаваемых паролях - рекомендуется 8 и выше" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Длина создаваемых паролей" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Вид панели инструментов" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Использовать настройку системы" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Использовать настройку системы" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Значки и текст" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Значки и текст" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Значки и выборочный текст" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Показывать только текст на важных кнопках" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Только значки" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Показывать только значки на кнопках" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Только текст" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Показывать только текст на кнопках" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Авторское право" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Файл был изменен" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Текущий файл «%s» был изменен. Перезагрузить его?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Сохранить изменения в текущем файле?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Вы совершили изменения, которые не были сохранены. Если Вы создадите новый " "файл не сохраняя изменения, они будут потеряны." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Сохранить изменения перед открытием?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Вы совершили изменения, которые не были сохранены. Если Вы откроете другой " "файл не сохраняя изменения, они будут потеряны." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Сохранить изменения перед выходом?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Вы совершили изменения, которые не были сохранены. Если Вы выйдите из " "программы не сохраняя изменения, они будут потеряны." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Сохранить изменения перед открытием?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Вы совершили изменения, которые не были сохранены. Если Вы выйдите из " "программы не сохраняя изменения, они будут потеряны." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Заменить существующий файл?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Файл «%s» уже существует, вы хотите его заменить?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Сохранить в ненадежный файл?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Вы выбрали способ сохранения ваших паролей в небезопасный(незашифрованный) " "формат файла — если кто-нибудь будет иметь доступ к этому файлу, тогда ему " "будут доступны все ваши пароли." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Экспортировать в файл" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Тип файла" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Выберите импортируемый файл" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Определить автоматически" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Выберите открываемый файл" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Выберите файл для сохранения" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Введите новый пароль" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Введите новый пароль для текущего файла. Перед этим файл нужно сохранить." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Текущий пароль" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Новый пароль" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Подтвердите пароль" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Указанный текущий пароль файла неверен." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Пароли не совпадают" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Пароль и его подтверждение не совпадают." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Использовать небезопасный пароль?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Указанный пароль небезопасен, он %s. Вы действительно хотите его " "использовать?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Введите пароль для снятия блокировки файла" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Текущий файл был заблокирован. Введите пароль для снятия блокировки." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Пароль" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Введен неверный пароль, введите его заново." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Введите пароль к файлу" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "Файл '%s' зашифрован. Введите пароль для его открытия." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Введите пароль файла" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Пожалуйста, задайте пароль для файла '%s'. В дальнейшем этот пароль будет " "необходим для открытия файла." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Введенные пароли не совпадают." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Не указан пароль" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Укажите пароль для нового файла." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Подробности" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Примечания" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Имя записи" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Название" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Описание записи" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Описание" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Тип записи" #: src/lib/dialog.py:859 msgid "Type" msgstr "Тип" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Примечания для записи" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Укажите название" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Необходимо указать название записи" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Удалить выделенные элементы (%i шт.)?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Удалив эти записи, вы также удалите содержащиеся в них вложенные записи." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Удалить папку «%s»?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "Удалив эту папку, вы также удалите хранящиеся в ней записи и подпапки." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Удалить запись «%s»?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Подтвердите удаление записи" #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Имя папки" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Описание папки" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Необходимо указать название папки" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Хранилище паролей для среды GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Неизвестная ошибка" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Произошла ошибка. Вы можете сообщить текст отчета разработчикам Revelation, " "указав, что вы делали в момент возникновения ошибки. Если вы продолжите " "работу с Revelation, возможны неожиданные результаты." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Сложность пароля" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Введите проверяемый пароль" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Результат проверки" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Пароль кажется надежным" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Пароль %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Создать пароль" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Созданный пароль" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Длина" #: src/lib/entry.py:170 msgid "Folder" msgstr "Папка" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Кредитная карта" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Криптографический ключ" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "База данных" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Код замка" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Электронная почта" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Обычный" #: src/lib/entry.py:306 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:322 msgid "Shell" msgstr "Сеанс оболочки" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Удалённый рабочий стол" #: src/lib/entry.py:355 msgid "Website" msgstr "Веб-сайт" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Номер карты" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Номер кредитной карты, обычно 16-значное число" #: src/lib/entry.py:438 msgid "Card type" msgstr "Тип карты" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Тип кредитной карты, например MasterCard или VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "Код CCV" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Проверочный номер карты, обычно это 3-цифры расположенные на обратной " "стороне карты" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Сертификат" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Сертификат, например X.509 для SSL" #: src/lib/entry.py:474 msgid "Code" msgstr "Код" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Код для доступа к чему-либо" #: src/lib/entry.py:487 msgid "A database name" msgstr "Имя базы данных" #: src/lib/entry.py:498 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Интернет- или сетевой домен, например organisation.org или название домена " "Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Адрес электронной почты" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Истекает" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Месяц, в котором истекает эта кредитная карта" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Сервер" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Имя компьютера, например computer.domain.com или MOIKOMPYUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "Файл ключа" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Файл ключей, например для проверки подлинности в ssh или для шифрования " "сертификатов X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Место" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Место, например проходная" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Секретное слово или комбинация символов, используемая для предоставления " "доступа." #: src/lib/entry.py:582 msgid "Phone number" msgstr "Номер телефона" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Номер телефона" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN-код" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Цифровой код, используемый в кредитных картах, мобильных телефонах и т. п." #: src/lib/entry.py:606 msgid "Port number" msgstr "Порт" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Номер порта сетевой службы, используется для прямого доступа к ней" #: src/lib/entry.py:618 msgid "URL" msgstr "Адрес" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Единообразный локатор (определитель местонахождения) ресурса" #: src/lib/entry.py:630 msgid "Username" msgstr "Имя пользователя" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Имя или другая опознавательная информация" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "Про_должить" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Экспорт" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "Со_здать" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Импорт" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Добавить" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "Добавить п_апку" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Изменить" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "Пе_резагрузить" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "За_менить" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "Раз_блокировать" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "О_бновить" #: src/lib/ui.py:104 msgid "_Discard" msgstr "Не сохран_ять" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "За_блокировать" #: src/lib/ui.py:114 msgid "Next" msgstr "Дальше" #: src/lib/ui.py:116 msgid "_Check" msgstr "Про_верка" #: src/lib/ui.py:119 msgid "Previous" msgstr "Назад" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Неизвестно" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Копирование пароля" #: src/lib/ui.py:628 msgid "Select File" msgstr "Выберите файл" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Обзор…" #: src/lib/ui.py:761 msgid "Generate" msgstr "Создать" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Примечания: " #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Обновлена %s назад" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Искомый текст" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Любой тип" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Найти предыдущее совпадение" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Найти следующее совпадение" #: src/lib/util.py:48 msgid "is too short" msgstr "слишком короткий" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "слишком однообразен" #: src/lib/util.py:83 msgid "is too weak" msgstr "слишком слабый" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "является палиндромом" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i сек." #: src/lib/util.py:348 msgid "years" msgstr "лет" #: src/lib/util.py:348 msgid "year" msgstr "год" #: src/lib/util.py:356 msgid "months" msgstr "мес." #: src/lib/util.py:356 msgid "month" msgstr "мес." #: src/lib/util.py:360 msgid "weeks" msgstr "нед." #: src/lib/util.py:360 msgid "week" msgstr "нед." #: src/lib/util.py:364 msgid "days" msgstr "дн." #: src/lib/util.py:364 msgid "day" msgstr "день" #: src/lib/util.py:368 msgid "hours" msgstr "час." #: src/lib/util.py:368 msgid "hour" msgstr "час" #: src/lib/util.py:372 msgid "minute" msgstr "мин." #: src/lib/util.py:376 msgid "seconds" msgstr "сек." #: src/lib/util.py:376 msgid "second" msgstr "сек." #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Список записей Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Список записей" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Создан:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Версия Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Файл, который будет открыт при запуске Relevation" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Менеджер паролей" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Управление личными паролями" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Изменять запись по двойному щелчку" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Открывать файл при запуске:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Открывать файл при запуске:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Блокировать файл через" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Сохранять файл при изменениях" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Сохранять файл автоматически при добавлении, изменении или удалении записей" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Длина создаваемых паролей" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Число символов в создаваемых паролях - рекомендуется 8 и выше" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Используйте символы пунктуации для паролей" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Используйте символы пунктуации для паролей" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "_Отображать пароли" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Вид панели инструментов" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Пароли" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Добавить новую папку" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Открыть файл" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Введите пароль файла" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Текущий пароль" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Новый пароль" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Создать пароль" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Не указан пароль" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Изменение записи" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Копирование пароля" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Выберите файл" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Вырезать записи" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Сн_ять выделение" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Не указан пароль" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Искомый текст" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Найти следующее совпадение" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Найти предыдущее совпадение" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Общие" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "В_ыход" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Файл" #: data/ui/menubar.ui:8 msgid "_New" msgstr "Со_здать" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Сохранить _как…" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "С_менить пароль…" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Закрыть" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "В_ыход" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "В_ырезать" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Копировать" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "_Копировать пароль" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Вставить" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "В_ыделить всё" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "Сн_ять выделение" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "По_иск..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Искать _далее" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Искать на_зад" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Настро_йки" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "_Запись" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Добавить запись…" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Доб_авить папку…" #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Вид" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "Панель _инструментов" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Панель по_иска" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "Строка _состояния" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "Со_здать пароль" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "С_ложность пароля" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "_Отображать пароли" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "Справ_ка" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_О программе" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Текст не найден" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "Фрагмент текста «%s» не содержится ни в одной записи.." #~ msgid " Find:" #~ msgstr " Искать:" #~ msgid "The type of account to search for" #~ msgstr "Тип просматриваемых записей" revelation-revelation-0.5.5/po/sr_RS.po000066400000000000000000001240401423125252400200460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Ivan Petrović , 2013-2014 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Serbian (Serbia) (http://www.transifex.com/hey_neken/" "revelation/language/sr_RS/)\n" "Language: sr_RS\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:92 msgid "Invalid data files" msgstr "" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "" #: src/revelation.py:432 msgid "Open a file" msgstr "" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "" #: src/revelation.py:438 msgid "Save data to a file" msgstr "" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "" #: src/revelation.py:447 msgid "Create a new entry" msgstr "" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "" #: src/revelation.py:454 msgid "Create a new folder" msgstr "" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "" #: src/revelation.py:610 msgid "New file" msgstr "" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "" #: src/revelation.py:1062 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1066 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1124 msgid "Unknown data" msgstr "" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1195 msgid "Entries copied" msgstr "" #: src/revelation.py:1217 msgid "Cut entries" msgstr "" #: src/revelation.py:1224 msgid "Entries cut" msgstr "" #: src/revelation.py:1239 msgid "Paste entries" msgstr "" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "" #: src/revelation.py:1261 msgid "Add entry" msgstr "" #: src/revelation.py:1267 msgid "Entry added" msgstr "" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "" #: src/revelation.py:1295 msgid "Update entry" msgstr "" #: src/revelation.py:1300 msgid "Entry updated" msgstr "" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1330 msgid "Folder added" msgstr "" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1397 msgid "Move entry" msgstr "" #: src/revelation.py:1405 msgid "Entries moved" msgstr "" #: src/revelation.py:1432 msgid "Remove entry" msgstr "" #: src/revelation.py:1438 msgid "Entries removed" msgstr "" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1472 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1478 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" #: src/revelation.py:1503 msgid "Export failed" msgstr "" #: src/revelation.py:1519 msgid "Import data" msgstr "" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "" #: src/revelation.py:1560 msgid "Locked" msgstr "" #: src/revelation.py:1561 msgid "File locked" msgstr "" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1586 msgid "File unlocked" msgstr "" #: src/revelation.py:1609 msgid "New file created" msgstr "" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "" #: src/revelation.py:1666 msgid "Save failed" msgstr "" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1745 msgid "Preferences" msgstr "" #: src/revelation.py:1754 msgid "General" msgstr "" #: src/revelation.py:1758 msgid "Interface" msgstr "" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: src/revelation.py:1803 msgid "Files" msgstr "" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" "Број карактера за генерисање лозинке - препоручљиво 8 или више карактера" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Датотека је промењена" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" #: src/lib/dialog.py:349 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:350 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" #: src/lib/dialog.py:641 msgid "Current password" msgstr "" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "" #: src/lib/dialog.py:843 msgid "Account Data" msgstr "" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "" #: src/lib/dialog.py:859 msgid "Type" msgstr "" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Урапвљач лозинки за ГНОМ окружење" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Непозната грешка" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Генератор лозинки" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Генерисана лозинка" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Дужина" #: src/lib/entry.py:170 msgid "Folder" msgstr "Директоријум" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Кредитна картица" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Кључ за шифровање" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "База" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Код за браву" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Е-пошта" #: src/lib/entry.py:271 msgid "FTP" msgstr "ФТП" #: src/lib/entry.py:289 msgid "Generic" msgstr "Генеричка" #: src/lib/entry.py:306 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:322 msgid "Shell" msgstr "Конзола" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Ураљена радна површ" #: src/lib/entry.py:355 msgid "Website" msgstr "Веб сајт" #: src/lib/entry.py:371 msgid "VNC" msgstr "ВНЦ" #: src/lib/entry.py:426 msgid "Card number" msgstr "Број картице" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Број картице, обично 16-цифрени број" #: src/lib/entry.py:438 msgid "Card type" msgstr "Врста картице" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Врста картице, као нпр. МастерКард или ВИЗА" #: src/lib/entry.py:450 msgid "CCV number" msgstr "" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Сертификат" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "" #: src/lib/entry.py:474 msgid "Code" msgstr "" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:487 msgid "A database name" msgstr "Име базе" #: src/lib/entry.py:498 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:511 msgid "An email address" msgstr "Е-адреса" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Датум истека" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "" #: src/lib/entry.py:534 msgid "Hostname" msgstr "" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" #: src/lib/entry.py:546 msgid "Key File" msgstr "" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:558 msgid "Location" msgstr "" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:582 msgid "Phone number" msgstr "" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "" #: src/lib/entry.py:594 msgid "PIN" msgstr "" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:606 msgid "Port number" msgstr "" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:618 msgid "URL" msgstr "" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" #: src/lib/entry.py:630 msgid "Username" msgstr "" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "" #: src/lib/ui.py:104 msgid "_Discard" msgstr "" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "" #: src/lib/ui.py:114 msgid "Next" msgstr "" #: src/lib/ui.py:116 msgid "_Check" msgstr "" #: src/lib/ui.py:119 msgid "Previous" msgstr "" #: src/lib/ui.py:123 msgid "Unknown" msgstr "" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "" #: src/lib/ui.py:628 msgid "Select File" msgstr "" #: src/lib/ui.py:635 msgid "Browse..." msgstr "" #: src/lib/ui.py:761 msgid "Generate" msgstr "" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "" #: src/lib/ui.py:1597 msgid "Any type" msgstr "" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "" #: src/lib/util.py:48 msgid "is too short" msgstr "" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:83 msgid "is too weak" msgstr "" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "" #: src/lib/util.py:348 msgid "years" msgstr "" #: src/lib/util.py:348 msgid "year" msgstr "" #: src/lib/util.py:356 msgid "months" msgstr "" #: src/lib/util.py:356 msgid "month" msgstr "" #: src/lib/util.py:360 msgid "weeks" msgstr "" #: src/lib/util.py:360 msgid "week" msgstr "" #: src/lib/util.py:364 msgid "days" msgstr "" #: src/lib/util.py:364 msgid "day" msgstr "" #: src/lib/util.py:368 msgid "hours" msgstr "" #: src/lib/util.py:368 msgid "hour" msgstr "" #: src/lib/util.py:372 msgid "minute" msgstr "" #: src/lib/util.py:376 msgid "seconds" msgstr "" #: src/lib/util.py:376 msgid "second" msgstr "" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:36 msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 msgid "Length of passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "" "Број карактера за генерисање лозинке - препоручљиво 8 или више карактера" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 msgid "Show passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password files" msgstr "Генератор лозинки" #: data/ui/help-overlay.ui:17 msgctxt "shortcut window" msgid "Create a new password file" msgstr "" #: data/ui/help-overlay.ui:24 msgctxt "shortcut window" msgid "Open a password file" msgstr "" #: data/ui/help-overlay.ui:31 msgctxt "shortcut window" msgid "Save a password file" msgstr "" #: data/ui/help-overlay.ui:39 msgctxt "shortcut window" msgid "Close the current password file" msgstr "" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Генератор лозинки" #: data/ui/help-overlay.ui:79 msgctxt "shortcut window" msgid "Add a new password entry" msgstr "" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 msgctxt "shortcut window" msgid "Copy password" msgstr "" #: data/ui/help-overlay.ui:117 msgctxt "shortcut window" msgid "Selection" msgstr "" #: data/ui/help-overlay.ui:121 msgctxt "shortcut window" msgid "Select all entries" msgstr "" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Генератор лозинки" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "Generic" msgctxt "shortcut window" msgid "General" msgstr "Генеричка" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "" #: data/ui/menubar.ui:8 msgid "_New" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:69 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "" #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "" #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "" #: data/ui/menubar.ui:220 msgid "_View" msgstr "" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "" #: data/ui/menubar.ui:263 msgid "_About" msgstr "" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" revelation-revelation-0.5.5/po/sv.po000066400000000000000000001507541423125252400174610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Swedish (http://www.transifex.com/hey_neken/revelation/" "language/sv/)\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Saknar datafiler" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Några av Revelations systemfiler kunde inte hittas, installera om Revelation." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Saknar konfigurationsdata" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation kunde inte hitta sin konfigurationsdata, vänligen installera om " "Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Ogiltiga datafiler" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Några av Revelations systemfiler innehåller ogiltigt data, installera om " "Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Öppna" #: src/revelation.py:432 msgid "Open a file" msgstr "Öppna en fil" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Spara" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Spara data till en fil" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Lägg till post" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Skapa en ny post" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Lägg till mapp" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Skapa en ny mapp" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Gå till" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Gå till markerade poster" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "R_edigera" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Redigera markerad post" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Ta _bort" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Ta bort de markerade posterna" #: src/revelation.py:610 msgid "New file" msgstr "Ny fil" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Ångra" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Ångra %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Gör om" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Gör om %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Öppning avbröts" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Träff hittades för \"%s\"" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Ingen träff hittades för \"%s\"" #: src/revelation.py:1108 msgid "Old file format" msgstr "" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Felaktigt lösenord" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Lösenordet du angav för filen \"%s\" var inte korrekt." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Öppning misslyckades" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Ogiltigt filformat" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Filen \"%s\" innehåller ogiltigt data." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Okänt data" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Filen \"%s\" innehåller okänt data. Det kan ha skapats av en nyare version " "av Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Okänd dataversion" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Filen \"%s\" har ett framtida versionsnummer, uppgradera Revelation för att " "öppna den." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Kunde inte identifiera filtyp" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Filtypen för filen \"%s\" kunde inte automatiskt identifieras. Försök att " "specificera filtypen manuellt." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Kunde inte öppna fil" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Filen \"%s\" kan inte öppnas. Kontrollera att filen finns och att du har " "rättigheter att öppna den." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Posten har inget lösenord att kopiera" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Lösenordet kopierat till urklipp" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Poster kopierade" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Klippa ut poster" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Poster urklippta" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Klistra in poster" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Poster inklistrade" #: src/revelation.py:1261 msgid "Add entry" msgstr "Lägg till post" #: src/revelation.py:1267 msgid "Entry added" msgstr "Post lades till" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Lägg till post avbröts" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Redigera mapp" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Redigera post" #: src/revelation.py:1295 msgid "Update entry" msgstr "Uppdatera post" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Posten uppdaterades" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Redigera post avbröts" #: src/revelation.py:1330 msgid "Folder added" msgstr "Mapp lades till" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Lägg till mapp avbröts" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "Inga gå till-kommando hittades för %s poster" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Posten öppnad" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Ogiltigt format för gå till-kommando" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" "Gå till-kommando för \"%s\"-poster är ogiltiga, rätta till de här i " "inställningarna." #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Saknar data" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "Posten \"%s\" innehåller inte allt data som krävs för att öppna den." #: src/revelation.py:1397 msgid "Move entry" msgstr "Flytta post" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Poster flyttade" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Ta bort post" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Poster borttagna" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Borttagning av post avbröts" #: src/revelation.py:1455 msgid "Password changed" msgstr "" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Ändring av lösenord avbröts" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Öppnade filen %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Ny fil avbröts" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Data exporterat till %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Exportering avbröts" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Kunde inte skriva till fil" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Filen \"%s\" kunde inte öppnas för skrivning. Kontrollera att du har " "passande rättigheter för att skriva till den." #: src/revelation.py:1503 msgid "Export failed" msgstr "Exportering misslyckades" #: src/revelation.py:1519 msgid "Import data" msgstr "Importera data" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Data importerat från %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Importering avbröts" #: src/revelation.py:1560 msgid "Locked" msgstr "Låst" #: src/revelation.py:1561 msgid "File locked" msgstr "Filen är låst" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Avslutning är inaktiverad på grund av osparade ändringar" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Filen är upplåst" #: src/revelation.py:1609 msgid "New file created" msgstr "Ny fil har skapats" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Ny fil avbröts" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Öppnade filen %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Data sparat till filen %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Sparning avbröts" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Kunde inte spara fil" #: src/revelation.py:1666 msgid "Save failed" msgstr "Sparning misslyckades" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Avslutning avbröts" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s omgjorda" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s ogjorda" #: src/revelation.py:1745 msgid "Preferences" msgstr "Inställningar" #: src/revelation.py:1754 msgid "General" msgstr "Allmänt" #: src/revelation.py:1758 msgid "Interface" msgstr "Gränssnitt" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Gå till-kommandon" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Dubbelklicksåtgärd" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Gå till kontot, om möjligt" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" "Gå till kontot (öppna i externt program) vid dubbelklick, om nödvändig data " "har matats in" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Redigera konto" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Redigera kontot vid dubbelklick" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Kopiera lösenordet till urklipp" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiera kontots lösenord till urklipp vid dubbelklick" #: src/revelation.py:1803 msgid "Files" msgstr "Filer" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Öppna fil vid uppstart:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "När aktiverad kommer den här filen att öppnas när programmet startas" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Välj fil att öppna automatiskt" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation-filer" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Alla filer" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Fil att öppna när Revelation startas" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Spara data automatiskt när det ändras" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Spara automatiskt datafilen när en post läggs till, ändras eller tas bort" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Lås fil efter inaktivitetsperioden" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Lås automatiskt datafilen efter en tidsperiods inaktivitet" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Tidsperioden för inaktivitet innan en fil låses, i minuter" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "minuter" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" "Gå till-kommando för %s-konton. Följande tilläggsvariabler kan användas:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: valfri tilläggsvariabel" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): valfritt substrängstillägg" #: src/revelation.py:1895 msgid "Passwords" msgstr "Lösenord" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Visa lösenord och andra hemligheter" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Visa lösenord och andra hemligheter, såsom PIN-koder (annars, dölj med ****)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Kopiera även användarnamn när lösenord kopieras" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" "När lösenordet kopieras till urklipp, lägg till användarnamnet före " "lösenordet om en \"kedja\" i urklippet" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Antalet tecken i genererade lösenord - 8 eller fler rekommenderas" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Längd på genererade lösenord" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Verktygsradstil" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Använd skrivbordets standard" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Visa verktygsobjekt med standardstil" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Visa ikoner och text" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Visa verktygsobjekt med både ikoner och text" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Visa ikoner och viktig text" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "Visa verktygsobjekt med text bredvid viktiga ikoner" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Visa endast ikoner" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Visa verktygsobjekt med endast ikoner" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Visa endast text" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Visa verktygsobjekt med endast text" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Copyright" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Filen har ändrats" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Den aktuella filen \"%s\" har ändrats. Vill du läsa in den igen?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Spara ändringar till aktuell fil?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Du har gjort ändringar som inte har sparats. Om du skapar en ny fil utan att " "spara den kommer dessa ändringar att förloras." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Spara ändringar innan öppning?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Du har gjort ändringar som inte har sparats. Om du öppnar en annan fil utan " "att spara den kommer dessa ändringar att förloras." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Spara ändringar innan avslut?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Du har gjort ändringar som inte har sparats. Om du avslutar utan att spara, " "kommer dessa ändringar att förloras." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Spara ändringar innan öppning?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Du har gjort ändringar som inte har sparats. Om du avslutar utan att spara, " "kommer dessa ändringar att förloras." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Ersätt existerande fil?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Filen \"%s\" finns redan - vill du ersätta den här filen?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Spara till osäker fil?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Du har valt att spara din lösenord i ett osäkert (okrypterat) filformat - om " "någon får tillgång till den här filen, kommer de att kunna se dina lösenord." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Välj fil att exportera till" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Filtyp" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Välj fil att importera" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Detektera automatiskt" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Välj fil att öppna" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Välj fil att spara till" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Ange nytt lösenord" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Ange ett nytt lösenord för den aktuella datafilen. Filen måste sparas innan " "det nya lösenordet verkställs." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Aktuellt lösenord" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Nytt lösenord" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Bekräfta lösenord" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Lösenordet du angav som det aktuella fillösenordet är felaktigt." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Lösenorden stämmer inte överens" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Lösenordet och lösenordsbekräftelsen du angav stämmer inte överens." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Använd osäkert lösenord?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Lösenordet du angav är inte säkert; %s. Är du säker på att du vill använda " "det?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Ange lösenordet för att låsa upp filen" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Den aktuella filen har låsts, ange filens lösenord för att låsa upp den." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Lösenord" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Lösenordet du angav var inte korrekt, försök igen." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Ange fillösenord" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Ange lösenordet för filen" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Lösenorden du matade in stämmer inte överens." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Inget lösenord angavs" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Du måste ange ett lösenord för den nya datafilen." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Kontodata" #: src/lib/dialog.py:844 msgid "Notes" msgstr "" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Namnet på posten" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Namn" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "En beskrivning av posten" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Beskrivning" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Posttypen" #: src/lib/dialog.py:859 msgid "Type" msgstr "Typ" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Namnet angavs inte" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Du måste ange ett namn för kontot" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Verkligen ta bort de %i markerade posterna?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Genom att ta bort dessa poster kommer du även att ta bort de poster som de " "kan innehålla." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Verkligen ta bort mappen \"%s\"?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Genom att ta bort denna mapp kommer du även att ta bort alla konton som " "mappar som den innehåller." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Verkligen ta bort kontot \"%s\"?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Bekräfta att du önskar ta bort det här kontot." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Namnet på mappen" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "En beskrivning av mappen" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Du måste ange ett namn för mappen" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "En lösenordshanterare för GNOME-skrivbordet" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Okänt fel" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Ett okänt fel inträffade. Rapportera nedanstående text till utvecklarna av " "Revelation, tillsammans med vad du gjorde som kan ha orsakat felet. Du kan " "försöka att fortsätta köra Revelation, men det kan uppträda onormalt." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Lösenordskontrollerare" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Ange ett lösenord att kontrollera" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Resultatet av kontrollen" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Lösenordet verkar bra" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Lösenordet %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Lösenordsgenerator" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Det genererade lösenordet" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Längd" #: src/lib/entry.py:170 msgid "Folder" msgstr "Mapp" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Kreditkort" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Krypteringsnyckel" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "Databas" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Dörrlås" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "E-post" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Allmän" #: src/lib/entry.py:306 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:322 msgid "Shell" msgstr "Skal" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:355 msgid "Website" msgstr "Webbplats" #: src/lib/entry.py:371 msgid "VNC" msgstr "" #: src/lib/entry.py:426 msgid "Card number" msgstr "Kortnummer" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Numret på ett kreditkort, vanligtvis ett 16-siffrigt nummer" #: src/lib/entry.py:438 msgid "Card type" msgstr "Korttyp" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ av kreditkort, exempelvis MasterCard eller VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV-nummer" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Ett kreditkortsverifikationsnummer, vanligtvis en 3-siffrig kod som hittas " "på baksidan av kortet" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Certifikat" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Ett certifikat, såsom ett X.509-SSL-certifikat" #: src/lib/entry.py:474 msgid "Code" msgstr "Kod" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "En kod som används för att tillhandahålla åtkomst till någonting" #: src/lib/entry.py:487 msgid "A database name" msgstr "Ett databasnamn" #: src/lib/entry.py:498 msgid "Domain" msgstr "Domän" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "En Internet- eller inloggningsdomän, exempelvis organisation.org eller en " "Windows-domän" #: src/lib/entry.py:511 msgid "An email address" msgstr "En e-postadress" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Utgångsdatum" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Den månad som kreditkortets giltighetstid går ut" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Värdnamn" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Namnet på en dator, exempelvis dator.domän.se eller MINDATOR" #: src/lib/entry.py:546 msgid "Key File" msgstr "Nyckelfil" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "En nyckelfil, används för autentisering, till exempel via ssh eller för att " "kryptera X.509-certifikat" #: src/lib/entry.py:558 msgid "Location" msgstr "Plats" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "En fysisk plats, såsom en kontorsingång" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "" "Ett hemligt ord eller teckenkombination som används för att bevisa att du " "har åtkomst" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Telefonnummer" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Ett telefonnummer" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN-kod" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Ett personligt identifikationsnummer, en numerisk kod som används för " "kreditkort, telefoner etc." #: src/lib/entry.py:606 msgid "Port number" msgstr "Portnummer" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "" "Ett nätverksportnummer, används för att komma åt nätverkstjänster direkt" #: src/lib/entry.py:618 msgid "URL" msgstr "Url" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "En Uniform Resource Locator, såsom en webbplatsadress" #: src/lib/entry.py:630 msgid "Username" msgstr "Användarnamn" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "" "Ett namn eller annan identifikation som används för att identifiera dig" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Fortsätt" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Exportera" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Generera" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Importera" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Lägg till post" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Lägg till mapp" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Ändra" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "_Läs om" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Ersätt" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "_Lås upp" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "_Uppdatera" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Förkasta" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Lås" #: src/lib/ui.py:114 msgid "Next" msgstr "Nästa" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Kontrollera" #: src/lib/ui.py:119 msgid "Previous" msgstr "Föregående" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Okänt" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Kopiera lösenord" #: src/lib/ui.py:628 msgid "Select File" msgstr "Välj fil" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Bläddra..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Generera" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Uppdaterad %s sedan" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Text att söka efter" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Alla typer" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Hitta föregående träff" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Hitta nästa träff" #: src/lib/util.py:48 msgid "is too short" msgstr "är för kort" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "är inte tillräckligt varierad" #: src/lib/util.py:83 msgid "is too weak" msgstr "är för svag" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "är en palindrom" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i sekunder" #: src/lib/util.py:348 msgid "years" msgstr "år" #: src/lib/util.py:348 msgid "year" msgstr "år" #: src/lib/util.py:356 msgid "months" msgstr "månader" #: src/lib/util.py:356 msgid "month" msgstr "månad" #: src/lib/util.py:360 msgid "weeks" msgstr "veckor" #: src/lib/util.py:360 msgid "week" msgstr "vecka" #: src/lib/util.py:364 msgid "days" msgstr "dagar" #: src/lib/util.py:364 msgid "day" msgstr "dag" #: src/lib/util.py:368 msgid "hours" msgstr "timmar" #: src/lib/util.py:368 msgid "hour" msgstr "timme" #: src/lib/util.py:372 msgid "minute" msgstr "minut" #: src/lib/util.py:376 msgid "seconds" msgstr "sekunder" #: src/lib/util.py:376 msgid "second" msgstr "sekund" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation kontolista" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Kontolista" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Skapad:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation version:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Fil att öppna när Revelation startas" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Redigera kontot vid dubbelklick" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Öppna fil vid uppstart:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Öppna fil vid uppstart:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Lås fil efter inaktivitetsperioden" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Spara data automatiskt när det ändras" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Spara automatiskt datafilen när en post läggs till, ändras eller tas bort" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Längd på genererade lösenord" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Antalet tecken i genererade lösenord - 8 eller fler rekommenderas" #: data/info.olasagasti.revelation.gschema.xml:105 msgid "Use punctuation chars for passwords" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:106 msgid "If set, punctuation characters will be also used to generate passwords." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Visa _lösenord" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Verktygsradstil" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Lösenord" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Skapa en ny mapp" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Öppna en fil" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Ange lösenordet för filen" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Aktuellt lösenord" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Nytt lösenord" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Lösenordsgenerator" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Inget lösenord angavs" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Redigera post" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Kopiera lösenord" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Välj fil" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Klippa ut poster" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_Avmarkera allt" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Inget lösenord angavs" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Text att söka efter" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Hitta nästa träff" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Hitta föregående träff" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Allmänt" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "_Avsluta" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Arkiv" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Ny" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Spara s_om..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Ändra _lösenord..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Stäng" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "_Avsluta" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Klipp _ut" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Kopiera" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Klistra in" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Markera allt" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Avmarkera allt" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Hitta..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Hitta _nästa" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Hitta _föregående" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "I_nställningar" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "Po_st" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Lägg till post..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Lägg till _mapp..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Visa" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Huvudverktygsrad" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Sökv_erktygsrad" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "_Statusrad" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "Lösenords_generator" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Lösenords_kontrollerare" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Visa _lösenord" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Hjälp" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Om" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Ingen träff hittades" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "Strängen \"%s\" matchar inga poster. Försök att söka efter en annan fras." #~ msgid " Find:" #~ msgstr " Hitta:" #~ msgid "The type of account to search for" #~ msgstr "Kontotypen att söka efter" revelation-revelation-0.5.5/po/uk.po000066400000000000000000001713031423125252400174410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Rustam Tsurik , 2013 # Rustam Tsurik , 2013-2014 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Ukrainian (http://www.transifex.com/hey_neken/revelation/" "language/uk/)\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " "11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " "100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " "(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "Відсутні файли з даними" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" "Деякі з системних файлів Revelations не можуть бути знайдені, будь ласка " "перевстановіть Revelations." #: src/revelation.py:88 msgid "Missing configuration data" msgstr "Не знайдено дані конфігурації" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" "Revelation не може знайти дані конфігурації, будь ласка перевстановіть " "Revelation." #: src/revelation.py:92 msgid "Invalid data files" msgstr "Невірні файли даних" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" "Деякі з системних файлів Revelation містять невірні дані, будь ласка " "перевстановіть Revelation." #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "_Відкрити" #: src/revelation.py:432 msgid "Open a file" msgstr "Відкрити файл" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "_Зберегти" #: src/revelation.py:438 msgid "Save data to a file" msgstr "Зберегти дані у файл" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "Додати запис" #: src/revelation.py:447 msgid "Create a new entry" msgstr "Створити новий запис" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "Додати папку" #: src/revelation.py:454 msgid "Create a new folder" msgstr "Створити нову папку" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "_Перейти до" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "Перейти до вибраних записів" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "_Редагувати" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "Редагувати вибраний запис" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "Видалити" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "Видалити вибрані записи" #: src/revelation.py:610 msgid "New file" msgstr "Новий файл" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "_Відмінити" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "_Відмінити %s" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "_Повернути" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "_Застосувати %s" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "Відкриття скасовано" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "Знайдено збіг з '%s'" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "Збіги з '%s' не знайдено" #: src/revelation.py:1108 msgid "Old file format" msgstr "Старий формат файла" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "Невірний пароль" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Пароль який ви ввели для файла '%s' невірний." #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "Не вдалося відкрити" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "Невірний формат файла" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "Файл '%s' містить невірні дані." #: src/revelation.py:1124 msgid "Unknown data" msgstr "Невідомі дані" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" "Файл '%s' містить невідомі дані. Він міг бути створений у новішій версії " "Revelation." #: src/revelation.py:1128 msgid "Unknown data version" msgstr "Невідома версія даних" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "" "Файл '%s' має занадто новий номер версії, будь-ласка оновіть Revelation щоб " "відкрити його." #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "Неможливо визначити тип файла" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "" "Тип файла для файла '%s' не може бути визначений автоматично. Спробуйте " "вибрати тип файла вручну." #: src/revelation.py:1136 msgid "Unable to open file" msgstr "Неможливо відкрити файл" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "" "Файл '%s' не може бути відкритий. Перевірте існування цього файлу та " "наявність прав на його відкриття." #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "Запис не має пароля для копіювання" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "Пароль скопійовано в буфер обміну" #: src/revelation.py:1195 msgid "Entries copied" msgstr "Записи скопійовані" #: src/revelation.py:1217 msgid "Cut entries" msgstr "Вирізати записи" #: src/revelation.py:1224 msgid "Entries cut" msgstr "Записи вирізані" #: src/revelation.py:1239 msgid "Paste entries" msgstr "Вставити записи" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "Записи вставлено" #: src/revelation.py:1261 msgid "Add entry" msgstr "Додати запис" #: src/revelation.py:1267 msgid "Entry added" msgstr "Запис додано" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "Додавання запису скасовано" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "Редагувати папку" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "Редагувати запис" #: src/revelation.py:1295 msgid "Update entry" msgstr "Зберегти зміни" #: src/revelation.py:1300 msgid "Entry updated" msgstr "Запис змінено" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "Редагування запису скасовано" #: src/revelation.py:1330 msgid "Folder added" msgstr "Папку додано" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "Додавання папки скасовано" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1370 msgid "Entry opened" msgstr "Запис відкрито" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "Невірний формат команди переходу" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "Відсутні дані для запису" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "Запису '%s' бракує деяких даних, необхідних щоб відкрити його." #: src/revelation.py:1397 msgid "Move entry" msgstr "Перемістити запис" #: src/revelation.py:1405 msgid "Entries moved" msgstr "Записи переміщено" #: src/revelation.py:1432 msgid "Remove entry" msgstr "Видалити запис" #: src/revelation.py:1438 msgid "Entries removed" msgstr "Записи видалені" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "Видалення запису скасовано" #: src/revelation.py:1455 msgid "Password changed" msgstr "Пароль змінено" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "Зміну пароля скасовано" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "Відкрито файл %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "Створення файлу скасовано" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "Дані експортовано в %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "Експорт скасовано" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "Неможливо записати у файл" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "" "Файл '%s' не може бути відкритий для запису. Перевірте чи ви маєте права на " "запис до цьго файлу." #: src/revelation.py:1503 msgid "Export failed" msgstr "Невдалий експорт" #: src/revelation.py:1519 msgid "Import data" msgstr "Імпортувати дані" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "Дані імпортовано з %s" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "Імпорт скасовано" #: src/revelation.py:1560 msgid "Locked" msgstr "Заблоковано" #: src/revelation.py:1561 msgid "File locked" msgstr "Файл заблоковано" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "Неможливо вийти через незбережені зміни" #: src/revelation.py:1586 msgid "File unlocked" msgstr "Файл розблоковано" #: src/revelation.py:1609 msgid "New file created" msgstr "Створено новий файл" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "Створення файлу скасовано" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "Відкрито файл %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "Дані збережено в файл %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "Збереження скасовано" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "Неможливо зберегти файл" #: src/revelation.py:1666 msgid "Save failed" msgstr "Не вдалося зберегти" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "Вихід скасовано" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "%s повернене" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "%s відмінене" #: src/revelation.py:1745 msgid "Preferences" msgstr "Налаштування" #: src/revelation.py:1754 msgid "General" msgstr "Загальне" #: src/revelation.py:1758 msgid "Interface" msgstr "Інтерфейс" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "Команди переходу" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "Дія за подвійним кліком" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "Перейти в акаунт, якщо можливо" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "Редагувати акаунт" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "Редагувати акаунт при подвійному кліку" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "Копіювати пароль в буфер обміну" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "Копіювати пароль до акаунта в буфер обміну при подвійному кліку" #: src/revelation.py:1803 msgid "Files" msgstr "Файли" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "Відкривати при запуску:" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "Якщо активовано, цей файл буде відкритий при запуску програми" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "Виберіть файл для автоматичного відкриття" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Файли Revelation" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "Всі файли" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "Відкривати файл при запуску Revelation" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "Автоматично зберігати дані при зміні" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" "Автоматично зберігати файл данних при додаванні, зміні або видаленні записів" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "Заблокувати файл неактивний впродовж" #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "Автоматично блокувати файл після певного періоду неактивності" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "Час неактивності для блокування файлу, в хвилинах" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "хвилин" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: символ \"%\" " #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "" #: src/revelation.py:1895 msgid "Passwords" msgstr "Паролі" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "Показати паролі та іншу секретну інформацію" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "" "Показувати паролі та інші секретні дані, такі як ПІН коди (у іншому випадку, " "сховати їх за ******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "Також копіювати ім’я користувача разом з паролем" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "Використовувати знаки пунктуації в паролях" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" "Використовувати знаки пунктуації, наприклад %, =, { або . при генерації " "пароля" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Кількість символів в згенерованому паролі - рекомендовано 8 або більше" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "Довжина згенерованих паролів" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "Стиль панелі" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "Стандартний стиль середовища" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "Показати інструменти на панелі з темою за замовчуванням" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "Показати іконки та текст" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "Показати інструменти на панелі з іконками та текстом" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "Показати іконки та важливий текст" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "" "Показати інструменти на панелі тільки з текстом, за винятком важливих іконок" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "Показати тільки іконки" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "Показати інструменти на панелі тільки з іконками" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "Показати тільки текст" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "Показати інструменти на панелі тільки з текстом" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "Авторське право" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "Файл було змінено" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Поточний файл '%s' було змінено. Бажаєте відкрити змінений файл?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "Зберегти зміни у поточний файл?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "Ви зробили зміни які не було збережено. Якщо створити новий файл не зберігши " "поточний, зміни буде втрачено." #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "Зберегти зміни перед відкриттям?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "Ви зробили зміни які не було збережено. Якщо відкрити інший файл не зберігши " "поточний, зміни буде втрачено." #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "Зберегти зміни перед виходом?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "" "Ви зробили зміни які не було збережено. Якщо вийти без збереження, ці зміни " "буде втрачено." #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "Зберегти зміни перед відкриттям?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "" "Ви зробили зміни які не було збережено. Якщо вийти без збереження, ці зміни " "буде втрачено." #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "Замінити існуючий файл?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Файл '%s' вже існує - бажаєте замінити цей файл?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "Зберегти в незашифрований файл?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "Ви вибрали збереження паролів в незахищеному(незашифрованому) форматі - якщо " "будь-хто отримає доступ до цього файла, він зможе побачити ваші паролі." #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "Виберіть файл для експорту" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "Тип файла" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "Виберіть файл для імпорту" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "Автоматичне визначення" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "Виберіть файл для відкриття" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "Виберіть файл для збереження" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "Введіть новий пароль" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "" "Введіть новий пароль для поточного файлу даних. Файл має бути збережений до " "застосування пароля." #: src/lib/dialog.py:641 msgid "Current password" msgstr "Поточний пароль" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "Новий пароль" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "Підтвердити пароль" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "Пароль який ви ввели для поточного файла невірний." #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "Паролі не збігаються" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "Пароль та його підтвердження яке ви ввели не збігаються." #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "Використати ненадійний пароль?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" "Введений пароль ненадійний; %s. Ви впевнені що хочете використати його?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "Введіть пароль щоб розблокувати файл" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" "Поточний файл заблоковано, будь ласка введіть пароль щоб розблокувати його." #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "Пароль" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "Невірно введений пароль, будь ласка спробуйте ще раз." #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "Введіть пароль для файла" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "" "Файл '%s' є зашифрований. Будь ласка, введіть пароль, щоб його відкрити." #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "Введіть пароль для файла" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "" "Будь ласка введіть пароль для файла '%s'. Цей пароль має бути використаний " "пізніше для того щоб відкрити файл." #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "Введені паролі не збігаються." #: src/lib/dialog.py:791 msgid "No password entered" msgstr "Не введено пароль" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "Ви маєте ввести пароль для нового файла." #: src/lib/dialog.py:843 msgid "Account Data" msgstr "Інформація про акаунт" #: src/lib/dialog.py:844 msgid "Notes" msgstr "Замітки" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "Ім’я запису" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "Ім’я" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "Опис запису" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "Опис" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "Тип запису" #: src/lib/dialog.py:859 msgid "Type" msgstr "Тип" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "Замітки для запису" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "Ім’я не введено" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "Ви маєте ввести ім’я для акаунта" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "Дійсно видалити %i вибраних записів?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" "Видаляючи ці записи ви також видаляєте всі записи які можуть міститися у них." #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "Дійсно видалити папку '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" "Видаляючи цю папку ви також видалите всі акаунти та папки що містяться у ній." #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "Дійсно видалити акаунт '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "Будь ласка підтвердіть що ви бажаєте видалити цей акаунт." #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "Ім’я папки" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "Опис папки" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "Ви маєте ввести ім’я для папки" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "Менеджер паролів для середовища GNOME" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "Невідома помилка" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "Виникла невідома помилка. Будь ласка відправте нижченаведений текст " "розробникам Revelation разом з інформацією що ви робили на момент коли вона " "виникла. Ви можете продовжувати роботу з Revelation, але програма може " "працювати некоректно." #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "Перевірка пароля" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "Введіть пароль для перевірки" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "Результат перевірки" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "Пароль придатний до використання" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "Пароль %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "Генератор паролів" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "Згенерований пароль" #: src/lib/dialog.py:1228 msgid "Length" msgstr "Довжина" #: src/lib/entry.py:170 msgid "Folder" msgstr "Папка" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "Кредитна картка" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "Ключ шифрування" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "База даних" #: src/lib/entry.py:237 msgid "Door lock" msgstr "Дверний замок" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "Ел. скринька" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "Загальний" #: src/lib/entry.py:306 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:322 msgid "Shell" msgstr "Шел" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "Віддалений роб. стіл" #: src/lib/entry.py:355 msgid "Website" msgstr "Вебсайт" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "Номер картки" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Номер кредитної картки, зазвичай 16-значний номер" #: src/lib/entry.py:438 msgid "Card type" msgstr "Тип картки" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Тип кредитної картки, наприклад MasterCard або VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV код" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "" "Номер для верифікації картки, зазвичай код з 3-х цифр розташований на " "зворотній стороні картки" #: src/lib/entry.py:462 msgid "Certificate" msgstr "Сертифікат" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Сертифікат, наприклад X.509 SSL сертифікат" #: src/lib/entry.py:474 msgid "Code" msgstr "Код" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "Секретний код для доступу до чого-небудь" #: src/lib/entry.py:487 msgid "A database name" msgstr "Ім’я бази даних" #: src/lib/entry.py:498 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "Інтернет домен або домен входу, наприклад organization.org або домен Windows" #: src/lib/entry.py:511 msgid "An email address" msgstr "Електронна адреса" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "Термін дії" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "Місяць коли закінчується термін дії картки" #: src/lib/entry.py:534 msgid "Hostname" msgstr "Ім’я хосту" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Ім’я комп’ютера, наприклад computer.domain.com або MYCOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "Файл ключа" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" "Файл ключа, що використовується для автентифікації ssh або для шифрування " "сертифікатів X.509" #: src/lib/entry.py:558 msgid "Location" msgstr "Розташування" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "Фізичне розташування, наприклад вхід у офіс" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "Секретне слово або комбінація символів для доступу" #: src/lib/entry.py:582 msgid "Phone number" msgstr "Телефонний номер" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "Номер телефону" #: src/lib/entry.py:594 msgid "PIN" msgstr "ПІН" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" "Персональний Ідентифікаційний Номер, цифровий код, що використовується у " "кредитних картках, телефонах, та ін." #: src/lib/entry.py:606 msgid "Port number" msgstr "Номер порту" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "Номер порту, що використовується для доступу до мережевих сервісів" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Уніфікований локатор ресурсів, наприклад, адреса вебсайта" #: src/lib/entry.py:630 msgid "Username" msgstr "Ім’я користувача" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "Ім’я або інший ідентифікатор, що використовується для автентифікації" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "_Продовжити" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "_Експортувати" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "_Генерувати" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "_Імпорт" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "_Додати запис..." #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "_Додати папку" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "_Змінити" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "Пе_резавантажити" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "_Замінити" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "Р_озблокувати" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "О_новити" #: src/lib/ui.py:104 msgid "_Discard" msgstr "_Відмінити" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Заблокувати" #: src/lib/ui.py:114 msgid "Next" msgstr "Далі" #: src/lib/ui.py:116 msgid "_Check" msgstr "_Перевірити" #: src/lib/ui.py:119 msgid "Previous" msgstr "Попереднє" #: src/lib/ui.py:123 msgid "Unknown" msgstr "Невідоме" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "Копіювати пароль" #: src/lib/ui.py:628 msgid "Select File" msgstr "Вибрати файл" #: src/lib/ui.py:635 msgid "Browse..." msgstr "Переглянути..." #: src/lib/ui.py:761 msgid "Generate" msgstr "Згенерувати" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "Замітки" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "Оновлено %s тому" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "Текст для пошуку" #: src/lib/ui.py:1597 msgid "Any type" msgstr "Будь-який тип" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "Знайти попереднє" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "Знайти наступне" #: src/lib/util.py:48 msgid "is too short" msgstr "надто короткий" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "недостатньо неоднорідний" #: src/lib/util.py:83 msgid "is too weak" msgstr "надто слабкий" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "є паліндромом" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i секунди" #: src/lib/util.py:348 msgid "years" msgstr "років" #: src/lib/util.py:348 msgid "year" msgstr "рік" #: src/lib/util.py:356 msgid "months" msgstr "місяці" #: src/lib/util.py:356 msgid "month" msgstr "місяць" #: src/lib/util.py:360 msgid "weeks" msgstr "тижні" #: src/lib/util.py:360 msgid "week" msgstr "тиждень" #: src/lib/util.py:364 msgid "days" msgstr "днів" #: src/lib/util.py:364 msgid "day" msgstr "день" #: src/lib/util.py:368 msgid "hours" msgstr "годин" #: src/lib/util.py:368 msgid "hour" msgstr "година" #: src/lib/util.py:372 msgid "minute" msgstr "хвилина" #: src/lib/util.py:376 msgid "seconds" msgstr "секунд" #: src/lib/util.py:376 msgid "second" msgstr "секунда" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Список акаунтів Revelation" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "Список акаунтів" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "Створено:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Версія Revelation:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "Відкривати файл при запуску Revelation" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "Менеджер паролів" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "Упорядкуйте та захистіть свої паролі" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "Редагувати акаунт при подвійному кліку" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "Відкривати при запуску:" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "Відкривати при запуску:" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "Заблокувати файл неактивний впродовж" #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "Автоматично зберігати дані при зміні" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "" "Автоматично зберігати файл данних при додаванні, зміні або видаленні записів" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "Довжина згенерованих паролів" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "Кількість символів в згенерованому паролі - рекомендовано 8 або більше" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "Використовувати знаки пунктуації в паролях" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "Використовувати знаки пунктуації в паролях" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "Показати _паролі" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "Стиль панелі" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "Паролі" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "Створити нову папку" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "Відкрити файл" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "Введіть пароль для файла" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "Поточний пароль" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Новий пароль" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "Генератор паролів" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Не введено пароль" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "Редагувати запис" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "Копіювати пароль" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "Вибрати файл" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "Вирізати записи" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "_Зняти віділення" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "Не введено пароль" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Текст для пошуку" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "Знайти наступне" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "Знайти попереднє" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "Загальне" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "Ви_хід" #: data/ui/menubar.ui:5 msgid "_File" msgstr "_Файл" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Новий" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Зберегти _як..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Змінити _пароль..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "_Закрити" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "Ви_хід" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "Виріза_ти" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "_Копіювати" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "Копіювати па_роль" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "_Вставити" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "_Виділити все" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "_Зняти віділення" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "_Знайти..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "Знайти наступне" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "Знайти попереднє" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "Налашту_вання" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "З_апис" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "_Додати запис..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "Додати _папку" #: data/ui/menubar.ui:220 msgid "_View" msgstr "_Переглянути" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "_Головна панель" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "Панель Пошуку" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "Панель статусу" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "_Генератор паролів" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "Перевірка _пароля" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "Показати _паролі" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "_Допомога" #: data/ui/menubar.ui:263 msgid "_About" msgstr "_Інформація" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "Не знайдено відповідностей" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "" #~ "Стрічка '%s' не збігається ні з одним записом. Спробуйте пошукати щось " #~ "інше." #~ msgid " Find:" #~ msgstr "Знайти:" #~ msgid "The type of account to search for" #~ msgstr "Тип акаунта для пошуку" revelation-revelation-0.5.5/po/zh.po000066400000000000000000001502051423125252400174410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the revelation package. # # Translators: # Yue Du , 2013 # Tao Wang , 2006 # Yue Du , 2013,2019 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: https://github.com/mikelolasagasti/revelation\n" "POT-Creation-Date: 2020-10-04 14:50+0200\n" "PO-Revision-Date: 2020-08-30 10:57+0000\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Chinese (http://www.transifex.com/hey_neken/revelation/" "language/zh/)\n" "Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/revelation.py:84 msgid "Missing data files" msgstr "丢失数据文件" #: src/revelation.py:84 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "一些 Revelation 系统文件无法被找到, 请重新安装 Revelation。" #: src/revelation.py:88 msgid "Missing configuration data" msgstr "丢失配置数据" #: src/revelation.py:88 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation 无法找到它的配置数据,请重新安装 Revelation。" #: src/revelation.py:92 msgid "Invalid data files" msgstr "非法数据文件" #: src/revelation.py:92 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "一些 Revelation 系统文件包含非法数据, 请重新安装 Revelation。" #: src/revelation.py:430 data/ui/menubar.ui:15 msgid "_Open" msgstr "打开 (_O)" #: src/revelation.py:432 msgid "Open a file" msgstr "打开文件" #: src/revelation.py:436 data/ui/menubar.ui:24 msgid "_Save" msgstr "保存 (_S)" #: src/revelation.py:438 msgid "Save data to a file" msgstr "保存数据到一个文件" #: src/revelation.py:445 src/revelation.py:1254 msgid "Add Entry" msgstr "添加条目" #: src/revelation.py:447 msgid "Create a new entry" msgstr "创建新条目" #: src/revelation.py:452 src/revelation.py:1319 src/revelation.py:1324 msgid "Add folder" msgstr "添加文件夹" #: src/revelation.py:454 msgid "Create a new folder" msgstr "创建新文件夹" #: src/revelation.py:459 src/lib/ui.py:109 data/ui/menubar.ui:195 #: data/ui/popup-tree.ui:20 msgid "_Go to" msgstr "转到 (_G)" #: src/revelation.py:461 msgid "Go to the selected entries" msgstr "转到所选择的条目" #: src/revelation.py:466 src/lib/ui.py:105 data/ui/menubar.ui:85 #: data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 msgid "_Edit" msgstr "编辑 (_E)" #: src/revelation.py:468 msgid "Edit the selected entry" msgstr "编辑所选择的条目" #: src/revelation.py:472 src/lib/ui.py:121 data/ui/menubar.ui:188 #: data/ui/popup-tree.ui:13 msgid "Re_move" msgstr "删除 (_m)" #: src/revelation.py:474 msgid "Remove the selected entries" msgstr "删除所选择的条目" #: src/revelation.py:610 msgid "New file" msgstr "新文件" #: src/revelation.py:624 data/ui/menubar.ui:88 msgid "_Undo" msgstr "撤销 (_U)" #: src/revelation.py:627 #, python-format msgid "_Undo %s" msgstr "撤销 %s (_U)" #: src/revelation.py:635 data/ui/menubar.ui:95 msgid "_Redo" msgstr "重复 (_R)" #: src/revelation.py:638 #, python-format msgid "_Redo %s" msgstr "重复 %s (_R)" #: src/revelation.py:731 src/revelation.py:1641 msgid "Open cancelled" msgstr "取消了打开文件" #: src/revelation.py:1062 #, fuzzy, python-format #| msgid "Match found for '%s'" msgid "Match found for “%s”" msgstr "发现匹配 '%s'" #: src/revelation.py:1066 #, fuzzy, python-format #| msgid "No match found for '%s'" msgid "No match found for “%s”" msgstr "没有找到匹配 '%s'" #: src/revelation.py:1108 msgid "Old file format" msgstr "老旧文件格式" #: src/revelation.py:1108 #, python-format msgid "" "Revelation detected that '%s' file has the old and actually non-secure file " "format. It is strongly recommended to save this file with the new format. " "Revelation will do it automatically if you press save after opening the file." msgstr "" "Revelation 检测到文件 '%s' 属于老旧且不安全的格式。强烈建议用新的格式保存此文" "件, Revelation 会在您打开文件点击保存时自动保存文件为新的格式。" #: src/revelation.py:1116 src/lib/dialog.py:657 src/lib/dialog.py:721 msgid "Incorrect password" msgstr "不正确的密码" #: src/revelation.py:1116 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "您所输入的 '%s' 文件的密码是不正确的。" #: src/revelation.py:1119 src/revelation.py:1123 src/revelation.py:1127 #: src/revelation.py:1131 src/revelation.py:1135 msgid "Open failed" msgstr "打开失败" #: src/revelation.py:1120 msgid "Invalid file format" msgstr "非法文件格式" #: src/revelation.py:1120 #, python-format msgid "The file '%s' contains invalid data." msgstr "文件 '%s' 包含非法数据。" #: src/revelation.py:1124 msgid "Unknown data" msgstr "未知数据" #: src/revelation.py:1124 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "文件 '%s' 包含未知数据。这也许是由更新版本的 Revelation 所创建的。" #: src/revelation.py:1128 msgid "Unknown data version" msgstr "未知数据版本" #: src/revelation.py:1128 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open " "it." msgstr "文件 '%s' 拥有更新的版本号, 请您升级 Revelation 来打开它。" #: src/revelation.py:1132 msgid "Unable to detect filetype" msgstr "无法检测文件类型" #: src/revelation.py:1132 #, python-format msgid "" "The file type of the file '%s' could not be automatically detected. Try " "specifying the file type manually." msgstr "无法自动的检测出文件 '%s' 的文件类型。请您手动的指定文件类型。" #: src/revelation.py:1136 msgid "Unable to open file" msgstr "无法打开文件" #: src/revelation.py:1136 #, python-format msgid "" "The file '%s' could not be opened. Make sure that the file exists, and that " "you have permissions to open it." msgstr "无法打开文件 '%s'。请确认文件存在,并且您有权限去打开它。" #: src/revelation.py:1184 msgid "Entry has no password to copy" msgstr "条目没有密码可复制" #: src/revelation.py:1188 msgid "Password copied to clipboard" msgstr "复制了密码到剪贴板" #: src/revelation.py:1195 msgid "Entries copied" msgstr "复制了条目" #: src/revelation.py:1217 msgid "Cut entries" msgstr "剪切条目" #: src/revelation.py:1224 msgid "Entries cut" msgstr "剪切了条目" #: src/revelation.py:1239 msgid "Paste entries" msgstr "粘贴了条目" #: src/revelation.py:1246 msgid "Entries pasted" msgstr "粘贴了条目" #: src/revelation.py:1261 msgid "Add entry" msgstr "添加条目" #: src/revelation.py:1267 msgid "Entry added" msgstr "添加了条目" #: src/revelation.py:1270 msgid "Add entry cancelled" msgstr "取消了添加条目" #: src/revelation.py:1283 msgid "Edit Folder" msgstr "编辑文件夹" #: src/revelation.py:1286 msgid "Edit Entry" msgstr "编辑条目" #: src/revelation.py:1295 msgid "Update entry" msgstr "更新条目" #: src/revelation.py:1300 msgid "Entry updated" msgstr "更新了条目" #: src/revelation.py:1303 msgid "Edit entry cancelled" msgstr "取消了编辑条目" #: src/revelation.py:1330 msgid "Folder added" msgstr "添加了文件夹" #: src/revelation.py:1333 msgid "Add folder cancelled" msgstr "取消了添加文件夹" #: src/revelation.py:1347 #, python-format msgid "No goto command found for %s entries" msgstr "没有找到 %s 条目的 goto 命令" #: src/revelation.py:1370 msgid "Entry opened" msgstr "打开了条目" #: src/revelation.py:1373 msgid "Invalid goto command format" msgstr "非法 goto 命令格式" #: src/revelation.py:1373 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "'%s' 条目的 goto 命令是非法的,请在偏好设置中修正。" #: src/revelation.py:1376 msgid "Missing entry data" msgstr "丢失条目数据" #: src/revelation.py:1376 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "条目 '%s' 没有包含所有用于打开它所必须的数据。" #: src/revelation.py:1397 msgid "Move entry" msgstr "移动条目" #: src/revelation.py:1405 msgid "Entries moved" msgstr "移动了条目" #: src/revelation.py:1432 msgid "Remove entry" msgstr "删除条目" #: src/revelation.py:1438 msgid "Entries removed" msgstr "删除了条目" #: src/revelation.py:1441 msgid "Entry removal cancelled" msgstr "取消了删除条目" #: src/revelation.py:1455 msgid "Password changed" msgstr "密码已修改" #: src/revelation.py:1458 msgid "Password change cancelled" msgstr "取消了修改密码" #: src/revelation.py:1472 #, fuzzy, python-format #| msgid "Opened file %s" msgid "Closed file %s" msgstr "打开了文件 %s" #: src/revelation.py:1478 #, fuzzy #| msgid "New file cancelled" msgid "Close file cancelled" msgstr "取消了新文件" #: src/revelation.py:1496 #, python-format msgid "Data exported to %s" msgstr "数据导出到 %s" #: src/revelation.py:1499 msgid "Export cancelled" msgstr "取消了导出" #: src/revelation.py:1502 msgid "Unable to write to file" msgstr "无法写入文件" #: src/revelation.py:1502 src/revelation.py:1665 #, python-format msgid "" "The file '%s' could not be opened for writing. Make sure that you have the " "proper permissions to write to it." msgstr "文件 '%s' 无法以写入形式打开。请确认您有合适的权限来写入这个文件。" #: src/revelation.py:1503 msgid "Export failed" msgstr "导出失败" #: src/revelation.py:1519 msgid "Import data" msgstr "导入数据" #: src/revelation.py:1523 #, python-format msgid "Data imported from %s" msgstr "数据从 %s 导入" #: src/revelation.py:1528 msgid "Import cancelled" msgstr "取消了导入" #: src/revelation.py:1560 msgid "Locked" msgstr "锁定了" #: src/revelation.py:1561 msgid "File locked" msgstr "文件被锁定" #: src/revelation.py:1573 msgid "Quit disabled due to unsaved changes" msgstr "由于有未保存的修改所以退出被禁止了" #: src/revelation.py:1586 msgid "File unlocked" msgstr "文件解锁了" #: src/revelation.py:1609 msgid "New file created" msgstr "创建了新文件" #: src/revelation.py:1612 msgid "New file cancelled" msgstr "取消了新文件" #: src/revelation.py:1638 #, python-format msgid "Opened file %s" msgstr "打开了文件 %s" #: src/revelation.py:1656 #, python-format msgid "Data saved to file %s" msgstr "数据保存到文件 %s" #: src/revelation.py:1661 msgid "Save cancelled" msgstr "取消了保存" #: src/revelation.py:1665 msgid "Unable to save file" msgstr "无法保存文件" #: src/revelation.py:1666 msgid "Save failed" msgstr "保存失败" #: src/revelation.py:1710 msgid "Quit cancelled" msgstr "取消了退出" #: src/revelation.py:1723 #, python-format msgid "%s redone" msgstr "重复了 %s" #: src/revelation.py:1736 #, python-format msgid "%s undone" msgstr "撤销了 %s" #: src/revelation.py:1745 msgid "Preferences" msgstr "首选项" #: src/revelation.py:1754 msgid "General" msgstr "常规" #: src/revelation.py:1758 msgid "Interface" msgstr "界面" #: src/revelation.py:1762 src/revelation.py:1867 msgid "Goto Commands" msgstr "转到命令" #: src/revelation.py:1772 msgid "Doubleclick Action" msgstr "双击行为" #. radio-button for go to #: src/revelation.py:1775 msgid "Go to account, if possible" msgstr "如果可能,转到帐户" #: src/revelation.py:1778 msgid "" "Go to the account (open in external application) on doubleclick, if required " "data is filled in" msgstr "如果需要填充数据,在双击时转到帐户 (用外部程序打开)" #. radio-button for edit #: src/revelation.py:1782 msgid "Edit account" msgstr "编辑帐户" #: src/revelation.py:1785 msgid "Edit the account on doubleclick" msgstr "双击时编辑帐户" #. radio-button for copy #: src/revelation.py:1789 msgid "Copy password to clipboard" msgstr "复制密码到剪贴板" #: src/revelation.py:1792 msgid "Copy the account password to clipboard on doubleclick" msgstr "当双击的时候复制帐户密码到剪贴板" #: src/revelation.py:1803 msgid "Files" msgstr "文件" #. checkbutton and file button for autoloading a file #: src/revelation.py:1806 msgid "Open file on startup:" msgstr "在启动时打开文件" #: src/revelation.py:1810 msgid "When enabled, this file will be opened when the program is started" msgstr "当启用后,将会在程序开始时打开这个文件" #: src/revelation.py:1812 msgid "Select File to Automatically Open" msgstr "选择自动打开的文件" #: src/revelation.py:1820 src/lib/dialog.py:537 src/lib/dialog.py:558 msgid "Revelation files" msgstr "Revelation 文件" #: src/revelation.py:1825 src/lib/dialog.py:542 src/lib/dialog.py:563 msgid "All files" msgstr "所有的文件" #: src/revelation.py:1830 msgid "File to open when Revelation is started" msgstr "当启动 Revelation 时要打开的文件" #. check-button for autosave #: src/revelation.py:1838 msgid "Automatically save data when changed" msgstr "当改动数据时自动保存" #: src/revelation.py:1841 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "当添加、修改或者删除条目时,自动保存数据文件" #. autolock file #: src/revelation.py:1845 msgid "Lock file when inactive for" msgstr "锁定文件,当不活动 " #: src/revelation.py:1848 msgid "Automatically lock the data file after a period of inactivity" msgstr "经过一段时间不活动后,自动锁定数据文件" #: src/revelation.py:1854 msgid "The period of inactivity before locking the file, in minutes" msgstr "在锁定文件前不活动的时间(分钟)" #: src/revelation.py:1860 src/lib/util.py:372 msgid "minutes" msgstr "分" #: src/revelation.py:1878 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "转到 %s 帐户的命令。 可以使用下列扩展变量:" #: src/revelation.py:1884 msgid "%%: a \"%\" sign" msgstr "%%: 一个%符号" #: src/revelation.py:1885 msgid "%?x: optional expansion variable" msgstr "%?x: 可选扩展变量" #: src/revelation.py:1886 msgid "%(...%): optional substring expansion" msgstr "%(...%): 可选子字符串扩展" #: src/revelation.py:1895 msgid "Passwords" msgstr "密码" #. show passwords checkbutton #: src/revelation.py:1898 msgid "Display passwords and other secrets" msgstr "显示密码和其他保密信息" #: src/revelation.py:1901 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with " "******)" msgstr "显示密码和其他保密信息,如 PIN 号。 (否则,将仅显示******)" #. chain username checkbutton #: src/revelation.py:1905 msgid "Also copy username when copying password" msgstr "当复制密码时,也复制用户名" #: src/revelation.py:1908 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "当复制密码到剪贴板时,将用户名放置在密码前,形成剪贴板链。" #. use punctuation chars checkbutton #: src/revelation.py:1912 src/lib/dialog.py:1230 msgid "Use punctuation characters for passwords" msgstr "密码使用标点符号" #: src/revelation.py:1915 src/lib/dialog.py:1234 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "生成密码时使用如 % = { . 等标点符号" #: src/revelation.py:1923 src/lib/dialog.py:1227 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "生成密码的字符数。建议是8个或者更多。" #: src/revelation.py:1924 msgid "Length of generated passwords" msgstr "生成密码的长度" #: src/revelation.py:1930 msgid "Toolbar Style" msgstr "工具栏风格" #. radio-button for desktop default #: src/revelation.py:1933 msgid "Use desktop default" msgstr "使用桌面默认" #: src/revelation.py:1936 msgid "Show toolbar items with default style" msgstr "用默认风格显示工具栏子项" #. radio-button for icons and text #: src/revelation.py:1940 msgid "Show icons and text" msgstr "显示图标和文本" #: src/revelation.py:1943 msgid "Show toolbar items with both icons and text" msgstr "显示工具条子项的图标和文本" #. radio-button for icons and important text #: src/revelation.py:1947 msgid "Show icons and important text" msgstr "显示图标和重要文本" #: src/revelation.py:1950 msgid "Show toolbar items with text beside important icons" msgstr "除了重要图标外,还显示工具栏子项的文本" #. radio-button for icons only #: src/revelation.py:1954 msgid "Show icons only" msgstr "仅显示图标" #: src/revelation.py:1957 msgid "Show toolbar items with icons only" msgstr "仅显示工具栏子项的图标" #. radio-button for text only #: src/revelation.py:1961 msgid "Show text only" msgstr "仅显示文本" #: src/revelation.py:1964 msgid "Show toolbar items with text only" msgstr "仅显示工具栏子项的文本" #: src/lib/config.py.in:44 msgid "Copyright" msgstr "版权" #: src/lib/config.py.in:45 msgid "" "Revelation is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n" "Revelation is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with Revelation; if not, write to the Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: src/lib/dialog.py:267 msgid "File has changed" msgstr "文件已改变" #: src/lib/dialog.py:267 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "当前文件 '%s' 已经被修改了。您确定要重新加载它么?" #: src/lib/dialog.py:318 msgid "Save changes to current file?" msgstr "保存修改到当前的文件?" #: src/lib/dialog.py:319 msgid "" "You have made changes which have not been saved. If you create a new file " "without saving then these changes will be lost." msgstr "" "您没有保存您所做的修改。如果您创建一个新文件而不保存的话,那么将会失去这些改" "动。" #: src/lib/dialog.py:329 msgid "Save changes before opening?" msgstr "在打开前保存修改?" #: src/lib/dialog.py:330 msgid "" "You have made changes which have not been saved. If you open a different " "file without saving then these changes will be lost." msgstr "" "您没有保存您所做的修改。如果您打开其他文件而不保存的话,将会丢失这些改动。" #: src/lib/dialog.py:340 msgid "Save changes before quitting?" msgstr "在退出前保存修改?" #: src/lib/dialog.py:341 msgid "" "You have made changes which have not been saved. If you quit without saving, " "then these changes will be lost." msgstr "您没有保存您所做的修改。如果您退出而且不保存的话,将会丢失这些改动。" #: src/lib/dialog.py:349 #, fuzzy #| msgid "Save changes before opening?" msgid "Save changes before closing?" msgstr "在打开前保存修改?" #: src/lib/dialog.py:350 #, fuzzy #| msgid "" #| "You have made changes which have not been saved. If you quit without " #| "saving, then these changes will be lost." msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "您没有保存您所做的修改。如果您退出而且不保存的话,将会丢失这些改动。" #: src/lib/dialog.py:359 msgid "Replace existing file?" msgstr "替换以存在的文件?" #: src/lib/dialog.py:360 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "文件 '%s' 已经存在,您想替换这个文件么?" #: src/lib/dialog.py:383 msgid "Save to insecure file?" msgstr "保存到一个不安全的文件?" #: src/lib/dialog.py:384 msgid "" "You have chosen to save your passwords to an insecure (unencrypted) file " "format - if anyone has access to this file, they will be able to see your " "passwords." msgstr "" "您选择在一个不安全(未加密)的文件中保存您的密码。如果任何人可以访问到这个文" "件,他们将能够看到您的密码。" #: src/lib/dialog.py:458 msgid "Select File to Export to" msgstr "选择要导出的文件" #: src/lib/dialog.py:464 src/lib/dialog.py:502 msgid "Filetype" msgstr "文件类型" #: src/lib/dialog.py:496 msgid "Select File to Import" msgstr "选择要导入的文件" #: src/lib/dialog.py:504 msgid "Automatically detect" msgstr "自动检测" #: src/lib/dialog.py:532 msgid "Select File to Open" msgstr "选择要打开的文件" #: src/lib/dialog.py:553 msgid "Select File to Save to" msgstr "选择要保存的文件" #: src/lib/dialog.py:633 msgid "Enter new password" msgstr "输入新密码" #: src/lib/dialog.py:634 msgid "" "Enter a new password for the current data file. The file must be saved " "before the new password is applied." msgstr "为当前的数据文件输入一个新密码。 文件必须在新密码生效前被保存。" #: src/lib/dialog.py:641 msgid "Current password" msgstr "当前密码" #: src/lib/dialog.py:643 src/lib/dialog.py:774 msgid "New password" msgstr "新密码" #: src/lib/dialog.py:644 src/lib/dialog.py:775 msgid "Confirm password" msgstr "确认密码" #: src/lib/dialog.py:657 msgid "The password you entered as the current file password is incorrect." msgstr "您所输入的当前文件的密码是不正确的。" #: src/lib/dialog.py:660 src/lib/dialog.py:788 msgid "Passwords don't match" msgstr "密码不匹配" #: src/lib/dialog.py:660 msgid "The password and password confirmation you entered does not match." msgstr "密码和确认密码不匹配" #: src/lib/dialog.py:670 src/lib/dialog.py:803 msgid "Use insecure password?" msgstr "使用不安全的密码?" #: src/lib/dialog.py:671 src/lib/dialog.py:804 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "您所输入的密码不安全; %s。您确认要使用它么?" #: src/lib/dialog.py:692 msgid "Enter password to unlock file" msgstr "输入密码以解锁文件" #: src/lib/dialog.py:693 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "当前文件已经被锁定了,请输入文件密码以解锁这个文件。" #: src/lib/dialog.py:701 src/lib/dialog.py:746 src/lib/dialog.py:1154 #: src/lib/dialog.py:1222 src/lib/entry.py:570 msgid "Password" msgstr "密码" #: src/lib/dialog.py:721 msgid "The password you entered was not correct, please try again." msgstr "您所输入的密码不正确,请再试一次。" #: src/lib/dialog.py:740 msgid "Enter file password" msgstr "输入文件密码" #: src/lib/dialog.py:741 #, python-format msgid "The file '%s' is encrypted. Please enter the file password to open it." msgstr "文件 '%s' 被加密了,请输入文件密码以解锁这个文件。" #: src/lib/dialog.py:769 msgid "Enter password for file" msgstr "输入文件的密码" #: src/lib/dialog.py:770 #, python-format msgid "" "Please enter a password for the file '%s'. You will need this password to " "open the file at a later time." msgstr "请为文件 '%s' 输入一个密码。 以后您需要用这个密码来打开这个文件。" #: src/lib/dialog.py:788 msgid "The passwords you entered does not match." msgstr "您所输入的密码不匹配。" #: src/lib/dialog.py:791 msgid "No password entered" msgstr "没有输入密码" #: src/lib/dialog.py:791 msgid "You must enter a password for the new data file." msgstr "您必须为这个新的数据文件输入一个密码。" #: src/lib/dialog.py:843 msgid "Account Data" msgstr "帐户数据" #: src/lib/dialog.py:844 msgid "Notes" msgstr "注释" #: src/lib/dialog.py:848 msgid "The name of the entry" msgstr "条目名称" #: src/lib/dialog.py:849 src/lib/dialog.py:1025 msgid "Name" msgstr "名称" #: src/lib/dialog.py:852 msgid "A description of the entry" msgstr "条目的描述" #: src/lib/dialog.py:853 src/lib/dialog.py:1029 msgid "Description" msgstr "描述" #: src/lib/dialog.py:858 msgid "The type of entry" msgstr "条目类型" #: src/lib/dialog.py:859 msgid "Type" msgstr "类型" #: src/lib/dialog.py:862 msgid "Notes for the entry" msgstr "本条条目的注释" #: src/lib/dialog.py:935 src/lib/dialog.py:1055 msgid "Name not entered" msgstr "没有输入名称" #: src/lib/dialog.py:935 msgid "You must enter a name for the account" msgstr "您必须为这个帐户输入一个名称" #: src/lib/dialog.py:976 #, python-format msgid "Really remove the %i selected entries?" msgstr "真的要删除所选择的 %i 个条目?" #: src/lib/dialog.py:977 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "当删除这些条目的时候,也会删除他们所包含的所有条目。" #: src/lib/dialog.py:980 #, python-format msgid "Really remove folder '%s'?" msgstr "真的要删除文件夹 '%s'?" #: src/lib/dialog.py:981 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "当删除这个文件夹的时候,也会删除它所包含的所有帐户和文件夹。" #: src/lib/dialog.py:984 #, python-format msgid "Really remove account '%s'?" msgstr "真的要删除帐户 '%s'?" #: src/lib/dialog.py:985 msgid "Please confirm that you wish to remove this account." msgstr "请确认您想删除这个帐户" #: src/lib/dialog.py:1024 msgid "The name of the folder" msgstr "文件夹名称" #: src/lib/dialog.py:1028 msgid "A description of the folder" msgstr "文件夹的描述" #: src/lib/dialog.py:1055 msgid "You must enter a name for the folder" msgstr "您必须为这个文件夹输入一个名称" #: src/lib/dialog.py:1091 msgid "A password manager for the GNOME desktop" msgstr "GNOME 桌面环境的一个密码管理器" #: src/lib/dialog.py:1113 msgid "Unknown error" msgstr "未知错误" #: src/lib/dialog.py:1114 msgid "" "An unknown error occured. Please report the text below to the Revelation " "developers, along with what you were doing that may have caused the error. " "You may attempt to continue running Revelation, but it may behave " "unexpectedly." msgstr "" "发生了一个未知错误。 请将下列文字以及可能是你的那些操作引发了这个错误的信息报" "告给 Revelation 开发者。 你可以考虑继续运行 Revelation,但是它的行为可能不是" "你所期望的。" #: src/lib/dialog.py:1138 src/lib/dialog.py:1147 msgid "Password Checker" msgstr "密码检查器" #: src/lib/dialog.py:1153 src/lib/dialog.py:1156 src/lib/dialog.py:1171 msgid "Enter a password to check" msgstr "输入一个密码来检查" #: src/lib/dialog.py:1157 msgid "The result of the check" msgstr "检查的结果" #: src/lib/dialog.py:1176 src/lib/ui.py:728 msgid "The password seems good" msgstr "密码看起来很好" #: src/lib/dialog.py:1180 src/lib/ui.py:725 #, python-format msgid "The password %s" msgstr "密码 %s" #: src/lib/dialog.py:1208 src/lib/dialog.py:1216 msgid "Password Generator" msgstr "密码生成器" #: src/lib/dialog.py:1221 msgid "The generated password" msgstr "生成的密码" #: src/lib/dialog.py:1228 msgid "Length" msgstr "长度" #: src/lib/entry.py:170 msgid "Folder" msgstr "文件夹" #: src/lib/entry.py:182 msgid "Creditcard" msgstr "信用卡" #: src/lib/entry.py:201 msgid "Crypto Key" msgstr "密钥" #: src/lib/entry.py:219 src/lib/entry.py:486 msgid "Database" msgstr "数据库" #: src/lib/entry.py:237 msgid "Door lock" msgstr "门锁" #: src/lib/entry.py:253 src/lib/entry.py:510 msgid "Email" msgstr "电子邮件" #: src/lib/entry.py:271 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:289 msgid "Generic" msgstr "一般的" #: src/lib/entry.py:306 msgid "Phone" msgstr "电话" #: src/lib/entry.py:322 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:338 msgid "Remote Desktop" msgstr "远程桌面" #: src/lib/entry.py:355 msgid "Website" msgstr "网站" #: src/lib/entry.py:371 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:426 msgid "Card number" msgstr "卡号" #: src/lib/entry.py:427 msgid "The number of a creditcard, usually a 16-digit number" msgstr "信用卡号,通常16位数字" #: src/lib/entry.py:438 msgid "Card type" msgstr "卡类型" #: src/lib/entry.py:439 msgid "The type of creditcard, like MasterCard or VISA" msgstr "信用卡种类,如 MasterCard (万事达卡) 或者 VISA" #: src/lib/entry.py:450 msgid "CCV number" msgstr "CCV 号" #: src/lib/entry.py:451 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back " "of a card" msgstr "信用卡校验号,一般是在卡的背面的一个3个数字的号码" #: src/lib/entry.py:462 msgid "Certificate" msgstr "证书" #: src/lib/entry.py:463 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "一个证书,比如X.509 SSL 证书" #: src/lib/entry.py:474 msgid "Code" msgstr "密码" #: src/lib/entry.py:475 msgid "A code used to provide access to something" msgstr "一个用于访问某种东西的密码" #: src/lib/entry.py:487 msgid "A database name" msgstr "一个数据库的名字" #: src/lib/entry.py:498 msgid "Domain" msgstr "域" #: src/lib/entry.py:499 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" "一个 Internet 或者登录的域, 比如 organization.org 或者 一个 Windows 登录域" #: src/lib/entry.py:511 msgid "An email address" msgstr "一个电子邮件地址" #: src/lib/entry.py:522 msgid "Expiry date" msgstr "过期日期" #: src/lib/entry.py:523 msgid "The month that the credit card validity expires" msgstr "信用卡合法性过期的那个月" #: src/lib/entry.py:534 msgid "Hostname" msgstr "主机名" #: src/lib/entry.py:535 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "计算机名,比如 computer.domain.com 或者 MYCOMPUTER" #: src/lib/entry.py:546 msgid "Key File" msgstr "钥匙文件" #: src/lib/entry.py:547 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "一个钥匙文件,用于认证,如通过SSH或者加密 X.509 的证书" #: src/lib/entry.py:558 msgid "Location" msgstr "位置" #: src/lib/entry.py:559 msgid "A physical location, like office entrance" msgstr "一个物理地址,比如办公室门牌号" #: src/lib/entry.py:571 msgid "A secret word or character combination used for proving you have access" msgstr "用于提供你访问权限的一个密码或者字符的组合" #: src/lib/entry.py:582 msgid "Phone number" msgstr "电话号码" #: src/lib/entry.py:583 msgid "A telephone number" msgstr "一个电话号码" #: src/lib/entry.py:594 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:595 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "个人标识号码,信用卡或者电话所使用的数字密码" #: src/lib/entry.py:606 msgid "Port number" msgstr "端口号" #: src/lib/entry.py:607 msgid "A network port number, used to access network services directly" msgstr "一个网络端口号,用于直接访问网络服务" #: src/lib/entry.py:618 msgid "URL" msgstr "URL" #: src/lib/entry.py:619 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "一个URL,比如一个网站地址" #: src/lib/entry.py:630 msgid "Username" msgstr "用户名" #: src/lib/entry.py:631 msgid "A name or other identification used to identify yourself" msgstr "用于标识你自己的一个名字或者其他的标识符" #: src/lib/ui.py:36 src/lib/ui.py:103 msgid "_Continue" msgstr "继续 (_C)" #: src/lib/ui.py:39 src/lib/ui.py:106 data/ui/menubar.ui:61 msgid "_Export" msgstr "导出 (_E)" #: src/lib/ui.py:41 src/lib/ui.py:108 msgid "_Generate" msgstr "生成 (_G)" #. "revelation-generate" #: src/lib/ui.py:42 src/lib/ui.py:110 data/ui/menubar.ui:55 msgid "_Import" msgstr "导入 (_I)" #: src/lib/ui.py:45 src/lib/ui.py:112 msgid "_Add Entry" msgstr "添加条目(_A)" #. "revelation-new-entry" #: src/lib/ui.py:46 src/lib/ui.py:113 msgid "_Add Folder" msgstr "添加文件夹 (_A)" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:48 src/lib/ui.py:115 msgid "_Change" msgstr "修改 (_C)" #. "revelation-password-strong" #. "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:53 src/lib/ui.py:120 msgid "_Reload" msgstr "重新加载 (_R)" #: src/lib/ui.py:55 src/lib/ui.py:122 msgid "_Replace" msgstr "替换 (_R)" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:57 src/lib/ui.py:124 msgid "_Unlock" msgstr "解锁 (_U)" #. "revelation-unlock" #: src/lib/ui.py:58 src/lib/ui.py:125 msgid "_Update" msgstr "更新 (_U)" #: src/lib/ui.py:104 msgid "_Discard" msgstr "放弃 (_D)" #: src/lib/ui.py:111 data/ui/menubar.ui:46 msgid "_Lock" msgstr "锁定 (_L)" #: src/lib/ui.py:114 msgid "Next" msgstr "下一个" #: src/lib/ui.py:116 msgid "_Check" msgstr "检查 (_C)" #: src/lib/ui.py:119 msgid "Previous" msgstr "前一个" #: src/lib/ui.py:123 msgid "Unknown" msgstr "未知" #: src/lib/ui.py:513 src/lib/ui.py:735 msgid "Copy password" msgstr "复制密码" #: src/lib/ui.py:628 msgid "Select File" msgstr "选择文件" #: src/lib/ui.py:635 msgid "Browse..." msgstr "浏览..." #: src/lib/ui.py:761 msgid "Generate" msgstr "生成" #. notes #: src/lib/ui.py:1567 msgid "Notes: " msgstr "注释:" #: src/lib/ui.py:1573 #, python-format msgid "Updated %s ago" msgstr "以前更新过 %s" #: src/lib/ui.py:1595 msgid "Text to search for" msgstr "要搜索的文本" #: src/lib/ui.py:1597 msgid "Any type" msgstr "任何类型" #: src/lib/ui.py:1603 msgid "Find the previous match" msgstr "查找前一个匹配" #: src/lib/ui.py:1606 msgid "Find the next match" msgstr "查找下一个匹配" #: src/lib/util.py:48 msgid "is too short" msgstr "太短了" #: src/lib/util.py:57 msgid "isn't varied enough" msgstr "没有足够的变化" #: src/lib/util.py:83 msgid "is too weak" msgstr "太弱了" #: src/lib/util.py:92 msgid "is a palindrome" msgstr "是一个回文" #: src/lib/util.py:339 #, python-format msgid "%i seconds" msgstr "%i 秒" #: src/lib/util.py:348 msgid "years" msgstr "年" #: src/lib/util.py:348 msgid "year" msgstr "年" #: src/lib/util.py:356 msgid "months" msgstr "月" #: src/lib/util.py:356 msgid "month" msgstr "月" #: src/lib/util.py:360 msgid "weeks" msgstr "周" #: src/lib/util.py:360 msgid "week" msgstr "周" #: src/lib/util.py:364 msgid "days" msgstr "日" #: src/lib/util.py:364 msgid "day" msgstr "日" #: src/lib/util.py:368 msgid "hours" msgstr "小时" #: src/lib/util.py:368 msgid "hour" msgstr "小时" #: src/lib/util.py:372 msgid "minute" msgstr "分" #: src/lib/util.py:376 msgid "seconds" msgstr "秒" #: src/lib/util.py:376 msgid "second" msgstr "秒" #: src/lib/datahandler/xhtml.py:420 msgid "Revelation account list" msgstr "Revelation 帐户列表" #: src/lib/datahandler/xhtml.py:461 msgid "Account list" msgstr "帐户列表" #: src/lib/datahandler/xhtml.py:489 msgid "Created:" msgstr "创建:" #: src/lib/datahandler/xhtml.py:492 msgid "Revelation version:" msgstr "Revelation 版本:" #: data/info.olasagasti.revelation.appdata.xml.in:7 #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.appdata.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:10 msgid "" "Revelation is a password manager for the GNOME desktop, released under the " "GNU GPL license. It stores all your accounts and passwords in a single, " "secure place, and gives you access to it through a user-friendly graphical " "interface." msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.appdata.xml.in:49 #, fuzzy #| msgid "File to open when Revelation is started" msgid "Hide the content when the application is idle" msgstr "当启动 Revelation 时要打开的文件" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Password Manager" msgstr "密码管理器" #: data/info.olasagasti.revelation.desktop.in.in:5 msgid "Organize and secure your passwords" msgstr "管理并保护您的密码" #: data/info.olasagasti.revelation.gschema.xml:5 #, fuzzy #| msgid "Edit the account on doubleclick" msgid "Action to take on doubleclick" msgstr "双击时编辑帐户" #: data/info.olasagasti.revelation.gschema.xml:6 msgid "" "The action to take when doubleclicking an account in the treeview - valid " "values are \"goto\", \"edit\", and \"copy\"." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:11 msgid "" "If set, Revelation will copy both the username and the password to the " "clipboard when pressing \"Copy Password\" one after the other (when username " "is pasted, the password is automatically copied)." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:15 #, fuzzy #| msgid "Open file on startup:" msgid "Autoload a file on startup" msgstr "在启动时打开文件" #: data/info.olasagasti.revelation.gschema.xml:16 msgid "" "If set, Revelation will automatically load a data file on startup. The file " "to open is specified in the \"autoload_file\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:20 #, fuzzy #| msgid "Open file on startup:" msgid "A file to autoload on startup" msgstr "在启动时打开文件" #: data/info.olasagasti.revelation.gschema.xml:21 msgid "" "The full path to a file which Revelation should autoload when starting. The " "\"autoload\" key must also be set to true for this to work." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:25 #, fuzzy #| msgid "Lock file when inactive for" msgid "Autolock file when inactive" msgstr "锁定文件,当不活动 " #: data/info.olasagasti.revelation.gschema.xml:26 msgid "" "If set, Revelation will automatically lock the current file after a period " "of inactivity. The inactivity period is specified in the \"autolock_timeout" "\" key." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:31 msgid "" "The number of minutes of inactivity before the data file is automatically " "locked. The \"autolock\" option must be enabled for this to take effect." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:35 #, fuzzy #| msgid "Automatically save data when changed" msgid "Autosave data when changed" msgstr "当改动数据时自动保存" #: data/info.olasagasti.revelation.gschema.xml:36 #, fuzzy #| msgid "" #| "Automatically save the data file when an entry is added, modified or " #| "removed" msgid "" "If set, Revelation will automatically save the data file when an entry is " "added, updated or removed." msgstr "当添加、修改或者删除条目时,自动保存数据文件" #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for genereic accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:100 #, fuzzy #| msgid "Length of generated passwords" msgid "Length of passwords" msgstr "生成密码的长度" #: data/info.olasagasti.revelation.gschema.xml:101 #, fuzzy #| msgid "" #| "The number of characters in generated passwords - 8 or more are " #| "recommended" msgid "" "The number of characters in generated passwords. A length less than 4 " "characters will be ignored." msgstr "生成密码的字符数。建议是8个或者更多。" #: data/info.olasagasti.revelation.gschema.xml:105 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "Use punctuation chars for passwords" msgstr "密码使用标点符号" #: data/info.olasagasti.revelation.gschema.xml:106 #, fuzzy #| msgid "Use punctuation characters for passwords" msgid "If set, punctuation characters will be also used to generate passwords." msgstr "密码使用标点符号" #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:115 #, fuzzy #| msgid "Show _Passwords" msgid "Show passwords" msgstr "显示密码 (_P)" #: data/info.olasagasti.revelation.gschema.xml:116 msgid "" "When set, passwords will be displayed in plain text. Turning this option off " "will obscure passwords with ******." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:135 #, fuzzy #| msgid "Toolbar Style" msgid "Sets the toolbar style" msgstr "工具栏风格" #: data/info.olasagasti.revelation.gschema.xml:136 msgid "" "Sets the style of the toolbar items. \"desktop\" uses desktop default, \"both" "\" shows icons and text, \"both-horiz\" shows icons and important text, " "\"icons\" shows icons only, and \"text\" shows text only." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "" #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "" #: data/ui/help-overlay.ui:13 #, fuzzy #| msgid "Passwords" msgctxt "shortcut window" msgid "Password files" msgstr "密码" #: data/ui/help-overlay.ui:17 #, fuzzy #| msgid "Create a new folder" msgctxt "shortcut window" msgid "Create a new password file" msgstr "创建新文件夹" #: data/ui/help-overlay.ui:24 #, fuzzy #| msgid "Open a file" msgctxt "shortcut window" msgid "Open a password file" msgstr "打开文件" #: data/ui/help-overlay.ui:31 #, fuzzy #| msgid "Enter password for file" msgctxt "shortcut window" msgid "Save a password file" msgstr "输入文件的密码" #: data/ui/help-overlay.ui:39 #, fuzzy #| msgid "Current password" msgctxt "shortcut window" msgid "Close the current password file" msgstr "当前密码" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "" #: data/ui/help-overlay.ui:66 #, fuzzy #| msgid "New password" msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "新密码" #: data/ui/help-overlay.ui:75 #, fuzzy #| msgid "Password Generator" msgctxt "shortcut window" msgid "Password entries" msgstr "密码生成器" #: data/ui/help-overlay.ui:79 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Add a new password entry" msgstr "没有输入密码" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "" #: data/ui/help-overlay.ui:94 #, fuzzy #| msgid "Edit Entry" msgctxt "shortcut window" msgid "Edit current entry" msgstr "编辑条目" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "" #: data/ui/help-overlay.ui:108 #, fuzzy #| msgid "Copy password" msgctxt "shortcut window" msgid "Copy password" msgstr "复制密码" #: data/ui/help-overlay.ui:117 #, fuzzy #| msgid "Select File" msgctxt "shortcut window" msgid "Selection" msgstr "选择文件" #: data/ui/help-overlay.ui:121 #, fuzzy #| msgid "Cut entries" msgctxt "shortcut window" msgid "Select all entries" msgstr "剪切条目" #: data/ui/help-overlay.ui:128 #, fuzzy #| msgid "_Deselect All" msgctxt "shortcut window" msgid "Deselect all entries" msgstr "不选择所有 (_D)" #: data/ui/help-overlay.ui:137 #, fuzzy #| msgid "No password entered" msgctxt "shortcut window" msgid "Finding password entry" msgstr "没有输入密码" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "" #: data/ui/help-overlay.ui:148 #, fuzzy #| msgid "Text to search for" msgctxt "shortcut window" msgid "Hide the search bar" msgstr "要搜索的文本" #: data/ui/help-overlay.ui:155 #, fuzzy #| msgid "Find the next match" msgctxt "shortcut window" msgid "Find the next match" msgstr "查找下一个匹配" #: data/ui/help-overlay.ui:162 #, fuzzy #| msgid "Find the previous match" msgctxt "shortcut window" msgid "Find the previous match" msgstr "查找前一个匹配" #: data/ui/help-overlay.ui:171 #, fuzzy #| msgid "General" msgctxt "shortcut window" msgid "General" msgstr "常规" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "" #: data/ui/help-overlay.ui:182 #, fuzzy #| msgid "_Quit" msgctxt "shortcut window" msgid "Quit" msgstr "退出 (_Q)" #: data/ui/menubar.ui:5 msgid "_File" msgstr "文件 (_F)" #: data/ui/menubar.ui:8 msgid "_New" msgstr "新 (_N)" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "另存为 (_a) ..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "改变密码 (_P) ..." #: data/ui/menubar.ui:69 msgid "_Close" msgstr "关闭 (_C)" #: data/ui/menubar.ui:76 msgid "_Quit" msgstr "退出 (_Q)" #: data/ui/menubar.ui:104 data/ui/popup-tree.ui:45 msgid "Cu_t" msgstr "剪切 (_t)" #: data/ui/menubar.ui:111 data/ui/popup-tree.ui:52 msgid "_Copy" msgstr "复制 (_C)" #: data/ui/menubar.ui:118 data/ui/popup-tree.ui:59 msgid "Copy Pass_word" msgstr "复制密码(s_)" #: data/ui/menubar.ui:124 data/ui/popup-tree.ui:65 msgid "_Paste" msgstr "粘贴 (_P)" #: data/ui/menubar.ui:133 msgid "_Select All" msgstr "选择所有 (_S)" #: data/ui/menubar.ui:139 msgid "_Deselect All" msgstr "不选择所有 (_D)" #: data/ui/menubar.ui:147 msgid "_Find..." msgstr "查找 (_F) ..." #: data/ui/menubar.ui:154 msgid "Find Ne_xt" msgstr "查找下一个 (_x)" #: data/ui/menubar.ui:161 msgid "Find Pre_vious" msgstr "查找前一个 (_v)" #: data/ui/menubar.ui:170 msgid "Prefere_nces" msgstr "首选项 (_n)" #: data/ui/menubar.ui:178 msgid "E_ntry" msgstr "条目 (_n)" #: data/ui/menubar.ui:204 data/ui/popup-tree.ui:29 msgid "_Add Entry..." msgstr "添加条目(_A)..." #: data/ui/menubar.ui:211 data/ui/popup-tree.ui:36 msgid "Add _Folder..." msgstr "添加文件夹 (_F) ..." #: data/ui/menubar.ui:220 msgid "_View" msgstr "视图 (_V)" #: data/ui/menubar.ui:223 msgid "_Main Toolbar" msgstr "主工具栏 (_M)" #: data/ui/menubar.ui:228 msgid "S_earch Toolbar" msgstr "搜索工具条 (_e)" #: data/ui/menubar.ui:233 msgid "_Statusbar" msgstr "状态栏 (_S)" #: data/ui/menubar.ui:240 msgid "Password _Generator" msgstr "密码生成器 (_G)" #: data/ui/menubar.ui:246 msgid "Password _Checker" msgstr "密码检查器 (_C)" #: data/ui/menubar.ui:252 msgid "Show _Passwords" msgstr "显示密码 (_P)" #: data/ui/menubar.ui:260 msgid "_Help" msgstr "帮助 (_H)" #: data/ui/menubar.ui:263 msgid "_About" msgstr "关于(_A)" #: data/ui/menubar.ui:269 msgid "_Keyboard Shortcuts" msgstr "" #~ msgid "No match found" #~ msgstr "没有找到匹配" #, python-format #~ msgid "" #~ "The string '%s' does not match any entries. Try searching for a different " #~ "phrase." #~ msgstr "字符串 '%s' 无法匹配任何条目。请搜索其他词。" #~ msgid " Find:" #~ msgstr " 查找:" #~ msgid "The type of account to search for" #~ msgstr "搜索的帐户类型" revelation-revelation-0.5.5/requirements.txt000066400000000000000000000000421423125252400213170ustar00rootroot00000000000000PyGObject pycryptodomex pwquality revelation-revelation-0.5.5/src/000077500000000000000000000000001423125252400166265ustar00rootroot00000000000000revelation-revelation-0.5.5/src/bundle/000077500000000000000000000000001423125252400200775ustar00rootroot00000000000000revelation-revelation-0.5.5/src/bundle/AfSplitter.py000066400000000000000000000071641423125252400225360ustar00rootroot00000000000000"""Implementation of anti-forensic information splitting The AFsplitter supports secure data destruction crucial for secure on-disk key management. The key idea is to bloat information and therefor improving the chance of destroying a single bit of it. The information is bloated in such a way, that a single missing bit causes the original information become unrecoverable. The theory behind AFsplitter is presented in TKS1. The interface is simple. It consists of two functions: AFSplit(data, stripes, digesttype='sha1') AFMerge(data, stripes, digesttype='sha1') AFSplit operates on data and returns information splitted data. AFMerge does just the opposite: uses the information stored in data to recover the original splitted data. http://clemens.endorphin.org/AFsplitter TKS1 paper from http://clemens.endorphin.org/publications Copyright 2006 John Lenz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA http://www.gnu.org/copyleft/gpl.html """ import hashlib import math import string import struct import Cryptodome.Random as Random def _xor(a, b): """Internal function to performs XOR on two strings a and b""" return bytes([x ^ y for (x, y) in zip(a, b)]) def _diffuse(block, size, digest): """Internal function to diffuse information inside a buffer""" # Compute the number of full blocks, and the size of the leftover block digest_size = hashlib.new(digest).digest_size full_blocks = int(math.floor(float(len(block)) / float(digest_size))) padding = len(block) % digest_size # hash the full blocks ret = b"" for i in range(0, full_blocks): hash = hashlib.new(digest) hash.update(struct.pack(">I", i)) hash.update(block[i*digest_size:(i+1)*digest_size]) ret += hash.digest() # Hash the remaining data if padding > 0: hash = hashlib.new(digest) hash.update(struct.pack(">I", full_blocks)) hash.update(block[full_blocks * digest_size:]) ret += hash.digest()[:padding] return ret def AFSplit(data, stripes, digesttype='sha1'): """AF-Split data using digesttype. Returned data size will be len(data) * stripes""" blockSize = len(data) rand = Random.new() bufblock = [0] * blockSize ret = b"" for i in range(0, stripes-1): # Get some random data r = rand.read(blockSize) ret += r bufblock = _xor(r, bufblock) bufblock = _diffuse(bufblock, blockSize, digesttype) ret += _xor(bufblock, data) return ret def AFMerge(data, stripes, digesttype='sha1'): """AF-Merge data using digesttype. len(data) must be a multiple of stripes""" if len(data) % stripes != 0: raise ValueError("ERROR: data is not a multiple of strips") blockSize = len(data) // stripes bufblock = [0] * blockSize for i in range(0, stripes - 1): bufblock = _xor(data[i*blockSize:(i+1)*blockSize], bufblock) bufblock = _diffuse(bufblock, blockSize, digesttype) return _xor(data[(stripes-1)*blockSize:], bufblock) revelation-revelation-0.5.5/src/bundle/PBKDFv2.py000066400000000000000000000120321423125252400215450ustar00rootroot00000000000000# -*- coding: iso-8859-1 -*- """ - Implements the PKCS#5 v2.0: Password-Based Cryptography Standard from RSA Laboratories. RFC2898 http://www.rfc-editor.org/rfc/rfc2898.txt Modifications by John Lenz , April 2006 + Fix the PBKDFv2 algorithm so it is correct + Use Cipher.XOR instead of slow python xor + other performance improvements Original Code written by: Copyright (C) 2004 - Lars Strand This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA http://www.gnu.org/copyleft/gpl.html """ import hashlib import hmac # RFC2104 import math import string import struct # PBKDFv2 class PBKDFv2: """Implements the PKCS#5 v2.0: Password-Based Cryptography Standard from RSA Laboratories. RFC2898 http://www.rfc-editor.org/rfc/rfc2898.txt """ # init def __init__(self): # length of pseudorandom function: 20 for SHA-1, 16 for MD5 self.hLen = 20 # makeKey def makeKey(self, P, S, c, dkLen, digesttype='sha1'): """ Input: P password, an octet string S salt, an octet string c iteration count, a positive integer (>1000) dkLen intended length on octets of the derived key, a positive integer, at most (2^32 - 1) * hLen digesttype Digest used, passed to hmac module Output DK derived key, a dkLen-octet string """ # do some sanity checks try: str(P) str(S) int(c) float(dkLen) int(c) except: print("P = %s, S = %s, c = %s, dkLen = %s:" % (P, S, c, dkLen)) raise ValueError("ERROR! Input is not correct!") # Step 1: if dkLen is larger than maximum possible key - exit if dkLen > ((2 ^ 32 - 1) * self.hLen): maxlength = (2 ^ 32 - 1) * self.hLen raise ValueError("ERROR! Key is to large! Maxlength is " . str(maxlength)) # Step 2: # Let l be the number of hLen-octet blocks in the derived key, rounding up # and let r be the number of octets in the last block l = math.ceil(dkLen / float(self.hLen)) # if (dkLen % float(self.hLen)): l = int(l) + 1 # round up if necessary r = dkLen - (l - 1) * self.hLen # Step 3: # For each block of the derived key, apply the function F to the # password P, the salt S, the iteration count c, and the block index # to compute the block T = b"" for blockindex in range(int(l)): T += self.F(P, S, c, blockindex, digesttype) # Step 4 - extract the first dkLen octet to produce a derived key DK DK = T[:dkLen] # Step 5 - return the derived key DK return DK # F def F(self, P, S, c, i, digest): """For each block of the derived key, apply this function. Notation: || = concatenation operator PRF = Underlying pseudorandom function The function F is defined as the exclusive-or sum of the first c iterates if the underlying pseudorandom function PRF applied to the password P and the concatenation of the salt S and the block index i: F(P, S, c, i) = U1 XOR U2 XOR ... XOR Uc where U1 = PRF(P, S || INT(i)), U2 = PRF(P, U1) ... Uc = PRF(P, Uc-1) """ # The pseudorandom function, PRF, used is HMAC-SHA1 (rfc2104) iteration = 1 # the first iteration; P is the key, and a concatination of # S and blocknumber is the message istr = struct.pack(">I", i+1) PRFMaster = hmac.new(P, digestmod=getattr(hashlib, digest)) PRF = PRFMaster.copy() PRF.update(S) PRF.update(istr) U = PRF.digest() # the first iteration Fbuf = U while iteration < c: # loop through all iterations PRF = PRFMaster.copy() PRF.update(U) U = PRF.digest() Fbuf = self._xor(U, Fbuf) # XOR this new iteration with the old one iteration += 1 return Fbuf # xor def _xor(self, a, b): """Performs XOR on two strings a and b""" if len(a) != len(b): raise ValueError("ERROR: Strings are of different size! %s %s" % (len(a), len(b))) return bytes([x ^ y for (x, y) in zip(a, b)]) revelation-revelation-0.5.5/src/bundle/__init__.py000066400000000000000000000016251423125252400222140ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Bundled third-party modules # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import AfSplitter, PBKDFv2, luks revelation-revelation-0.5.5/src/bundle/luks.py000066400000000000000000000627351423125252400214440ustar00rootroot00000000000000""" Implements the LUKS (Linux Unified Key Setup) Version 1.0 on disk specification inside a file. http://luks.endorphin.org/ LUKS offers: * compatiblity via standardization, * secure against low entropy attacks, * support for multiple keys, * effective passphrase revocation, This module is compatible with dm-crypt and cryptsetup tools for the Linux kernel, as long as hashSpec="sha1" is used. Loopback files or partitions created with the linux kernel can be decrypted using this module. FreeOTFE (http://www.freeotfe.org/) should provide support for reading and writing on Windows. This module has one class LuksFile. Loading a LUKS disk image (use both, one after another): - load_from_file(file) - open_any_key(password) Creating a new LUKS disk image (use both): - create(file, cipherName, cipherMode, hashSpec, masterSize, stripes) - set_key(0, password, iterations) Once a file is unlocked (either because it was just created or open_any_key() returned True), you can perform the key operations: - enabled_key_count() - key_information(keyIndex) - set_key(keyIndex, password, iterations) - delete_key(keyIndex) Once a file is unlocked, you can perform data encryption/decryption with - data_length() - encrypt_data(offset, data) - decrypt_data(offset, length) - truncate(length) Finally, to close the file: - close() Copyright 2006 John Lenz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA http://www.gnu.org/copyleft/gpl.html """ import hashlib import math import os import stat import struct import Cryptodome.Random as Random from Cryptodome.Cipher import AES from . import PBKDFv2, AfSplitter class LuksError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) class LuksFile: """Implements the LUKS (Linux Unified Key Setup) Version 1.0 http://luks.endorphin.org/""" LUKS_FORMAT = ">6sH32s32s32sII20s32sI40s" LUKS_MAGIC = b"LUKS\xba\xbe" LUKS_KEY_DISABLED = 0x0000DEAD LUKS_KEY_ENABLED = 0x00AC71F3 SECTOR_SIZE = 512.0 KEY_STRIPES = 4000 SALT_SIZE = 32 DIGEST_SIZE = 20 def __init__(self): self.file = None self.masterKey = None self.ivGen = None # Read the header from the file descriptor def load_from_file(self, file): """Initialize this LuksFile class from the file. The file parameter should be an object implementing the File Object API This function will error if the file is not a LUKS partition (the LUKS_MAGIC does not match) """ if self.file != None: raise LuksError("This LuksFile has already been initialized") # Read the main parameters self.file = file self.file.seek(0) self.magic, \ self.version, \ cipherName, \ cipherMode, \ hashSpec, \ self.payloadOffset, \ self.keyBytes, \ self.mkDigest, \ self.mkDigestSalt, \ self.mkDigestIterations, \ self.uuid = \ struct.unpack(self.LUKS_FORMAT, self.file.read(208)) cipherName = cipherName.decode() cipherMode = cipherMode.decode() hashSpec = hashSpec.decode() # check magic if self.magic != self.LUKS_MAGIC: self.file = None raise LuksError("%s is not a LUKS data file" % filename) # Check the hash and cipher self.hashSpec = hashSpec.strip(" \x00") self._check_cipher(cipherName.strip(" \x00"), cipherMode.strip(" \x00")) # Load the key information self.keys = [None] * 8 for i in range(0, 8): self.keys[i] = self._key_block() self.keys[i].load_from_str(self.file.read(48)) # set the digest to be the correct size self.mkDigest = self.mkDigest[:hashlib.new(self.hashSpec).digest_size] self.masterKey = None # Generate a new header def create(self, file, cipherName, cipherMode, hashSpec, masterSize, stripes): """Initializes the file class passed in with the LUKS header Parameters cipherName: aes, cast5, blowfish cipherMode: cbc-plain, cbc-essiv: hashSpec: sha1, sha256, md5, ripemd160 masterSize: length of the master key in bytes (must match cipher) stripes: number of stripes when Af Splitting keys For compatibility with the Linux kernel dm-crypt, hashSpec must equal "sha1" cbc-plain uses the sector number as the IV. This has a weakness: an attacker may be able to detect the existance of watermarked files. cbc-essiv: protects against the weakness in cbc-plain, but is slightly slower. The digest size of the hash function passed to cbc-essiv must match the key size of the cipher. aes-cbc-essiv:sha256 works, while aes-cbc-essiv:sha1 does not For more information about the details of the attacks and risk assesment, see http://clemens.endorphin.org/LinuxHDEncSettings """ if self.file != None: raise LuksError("This LuksFile has already been initialized") self._check_cipher(cipherName, cipherMode) self.magic = self.LUKS_MAGIC self.version = 1 self.mkDigestIterations = 10 self.keyBytes = masterSize self.hashSpec = hashSpec rand = Random.new() # Generate the salt self.mkDigestSalt = rand.read(self.SALT_SIZE) # Generate a random master key self.masterKey = rand.read(self.keyBytes) self.ivGen.set_key(self.masterKey) # generate the master key digest pbkdf = PBKDFv2.PBKDFv2() self.mkDigest = pbkdf.makeKey(self.masterKey, self.mkDigestSalt, self.mkDigestIterations, hashlib.new(self.hashSpec).digest_size, self.hashSpec) # init the key information currentSector = math.ceil(592.0 / self.SECTOR_SIZE) alignSectors = 4096 / self.SECTOR_SIZE blocksPerStripe = math.ceil(float(self.keyBytes * stripes) / self.SECTOR_SIZE) self.keys = [None] * 8 for i in range(0, 8): if currentSector % alignSectors > 0: currentSector += alignSectors - currentSector % alignSectors self.keys[i] = self._key_block() self.keys[i].create(currentSector, stripes, self.LUKS_KEY_DISABLED) currentSector += blocksPerStripe # Set the data offset if currentSector % alignSectors > 0: currentSector += alignSectors - currentSector % alignSectors self.payloadOffset = int(currentSector) # Generate a UUID for this file self._uuidgen(rand) # Create a new file, and save the header into it self.file = file self._save_header() # Write FF into all the key slots FFData = bytes([255] * int(self.SECTOR_SIZE)) for i in range(0, 8): self.file.seek(int(self.keys[i].keyMaterialOffset)) for sector in range(0, int(blocksPerStripe)): self.file.write(FFData) # Flush the file to disk try: self.file.flush() os.fsync(self.file.fileno()) except: # We might get an error because self.file.fileno() does not exist on StringIO pass def set_key(self, keyIndex, password, iterations, checkMinStripes=0): """Sets the key block at keyIndex using password Sets the key block at keyIndex using password, hashed iterations times using PBKDFv2 (RFC2104). This LuksFile must be unlocked by calling open_any_key() before calling this function. checkMinStripes is used to detect basic header manipulation, since the number of stripes for the key is set by create(), before we write a password to disk we make sure the key is not weak because of a small number of stripes. This function will raise an error if the key is already enabled. """ # Some checks if self.masterKey == None: raise LuksError("A key has not been unlocked. Call open_any_key() first.") if keyIndex < 0 or keyIndex > 7: raise LuksError("keyIndex out of range") key = self.keys[keyIndex] if key.active != self.LUKS_KEY_DISABLED: raise LuksError("Key is active. Delete the key and try again") if checkMinStripes == 0: checkMinStripes = self.KEY_STRIPES if key.stripes < checkMinStripes: raise LuksError("Key section %i contains too few stripes. Header manipulation?" % keyIndex) key.passwordIterations = iterations # Generate a random salt for this key rand = Random.new() key.passwordSalt = rand.read(self.SALT_SIZE) # Hash the key using PBKDFv2 pbkdf = PBKDFv2.PBKDFv2() derived_key = pbkdf.makeKey(password.encode(), key.passwordSalt, key.passwordIterations, self.keyBytes, self.hashSpec) # Split the key into key.stripes AfKey = AfSplitter.AFSplit(self.masterKey, key.stripes, self.hashSpec) AfKeySize = len(AfKey) if AfKeySize != key.stripes * self.keyBytes: raise LuksError("ERROR: AFSplit did not return the correct length of key") # Set the key for IV generation self.ivGen.set_key(derived_key) # Encrypt the splitted key using the hashed password AfSectors = int(math.ceil(float(AfKeySize) / self.SECTOR_SIZE)) for sector in range(0, AfSectors): self._encrypt_sector(derived_key, key.keyMaterialOffset + sector, sector, \ AfKey[int(sector*self.SECTOR_SIZE):int((sector+1)*self.SECTOR_SIZE)]) key.active = self.LUKS_KEY_ENABLED # Reset the key used for to IV generation in data mode self.ivGen.set_key(self.masterKey) self._save_header() def open_key(self, keyIndex, password): """Open a specific keyIndex using password. Returns True on success""" if self.file == None: raise LuksError("LuksFile has not been initialized") if keyIndex < 0 or keyIndex > 7: raise LuksError("keyIndex is out of range") key = self.keys[keyIndex] if key.active != self.LUKS_KEY_ENABLED: return False # Hash the password using PBKDFv2 pbkdf = PBKDFv2.PBKDFv2() derived_key = pbkdf.makeKey(password.encode(), key.passwordSalt, key.passwordIterations, self.keyBytes, self.hashSpec) # Setup the IV generation to use this key self.ivGen.set_key(derived_key) # Decrypt the master key data using the hashed password AfKeySize = key.stripes * self.keyBytes AfSectors = int(math.ceil(float(AfKeySize) / self.SECTOR_SIZE)) AfKey = b"" for sector in range(0, AfSectors): AfKey += self._decrypt_sector(derived_key, key.keyMaterialOffset + sector, sector) AfKey = AfKey[0:AfKeySize] # Merge the decrypted master key masterKey = AfSplitter.AFMerge(AfKey, key.stripes, self.hashSpec) # Check if the password was the correct one, by checking the master key digest checkDigest = pbkdf.makeKey(masterKey, self.mkDigestSalt, self.mkDigestIterations, hashlib.new(self.hashSpec).digest_size, self.hashSpec) # Since the header only stores DIGEST_SIZE (which is smaller than sha256 digest size) # trim the digest to DIGEST_SIZE checkDigest = checkDigest[:self.DIGEST_SIZE] if checkDigest != self.mkDigest: return False self.masterKey = masterKey self.ivGen.set_key(self.masterKey) return True def open_any_key(self, password): """Try to open any enabled key using the provided password. Returns index number on success, or None""" if self.file == None: raise LuksError("LuksFile has not been initialized") for i in range(0, 8): if self.open_key(i, password): return i return None def enabled_key_count(self): """Returns the number of enabled key slots""" if self.file == None: raise LuksError("LuksFile has not been initialized") cnt = 0 for i in range(0, 8): if self.keys[i].active == self.LUKS_KEY_ENABLED: cnt += 1 return cnt def key_information(self, keyIndex): """Returns a tuple of information about the key at keyIndex (enabled, iterations, stripes)""" if self.file == None: raise LuksError("LuksFile has not been initialized") if keyIndex < 0 or keyIndex > 7: raise LuksError("keyIndex out of range") key = self.keys[keyIndex] active = (key.active == self.LUKS_KEY_ENABLED) return (active, key.passwordIterations, key.stripes) def delete_key(self, keyIndex): """Delete the key located in slot keyIndex. WARNING! This is NOT a secure delete Warning! If keyIndex is the last enabled key, the data will become unrecoverable This function will not securely delete the key. Because this class is designed for reading and writing to a file, there is no guarante that writing over the data inside the file will destroy it. If you have a key leaked, you need to investigate other methods of securely destroying data, including destroying the entire file system and disk this file was located on, and any backups of this file that were created (depending on your needs). The good news is, because of the way LUKS encrypts the master key, only one bit in the master key needs to be destoryed. But the same bit needs to be destroyed in all copies, including (possibly) the journal, bad remapped blocks on the disk, etc. If you would like to continue using this encrypted file, you need to set_key() a new key, delete_key() the leaked key, and then copy the file into a new file on a different disk and filesystem. This class writes "FF" to the key location during delete_key(), so during the copy the new disk will just get "FF" in the key location, which will be unrecoverable on the new disk. """ if self.file == None: raise LuksError("LuksFile has not been initialized") if keyIndex < 0 or keyIndex > 7: raise LuksError("keyIndex out of range") key = self.keys[keyIndex] # Start and end offset of the key material startOffset = key.keyMaterialOffset endOffset = startOffset + int(math.ceil((self.keyBytes * key.stripes) / self.SECTOR_SIZE)) # Just write "FF" into the locations for i in range(startOffset, endOffset): self.file.seek(int(i * self.SECTOR_SIZE)) self.file.write("\xFF" * int(self.SECTOR_SIZE)) try: self.file.flush() os.fsync(self.file.fileno()) except: # We might get an error because self.file.fileno() does not exist on StringIO pass key.active = self.LUKS_KEY_DISABLED key.passwordIterations = 0 key.passwordSalt = '' self._save_header() def close(self): """Close the underlying file descriptor, and discard the cached master key used for decryption""" if self.ivGen != None: self.ivGen.set_key(b"") if self.file != None: self.file.close() self.file = None self.masterKey = None self.ivGen = None def data_length(self): """Returns the total data length""" if self.file == None: raise LuksError("LuksFile has not been initialized") # Seek to the end of the file, and use tell() self.file.seek(0, 2) fLen = self.file.tell() return fLen - int(self.payloadOffset * self.SECTOR_SIZE) def truncate(self, length): """Truncate the file so that the data is maximum of length in size""" if self.file == None: raise LuksError("LuksFile has not been initialized") if length % self.SECTOR_SIZE != 0: raise LuksError("length must be a multiple of %s" % self.SECTOR_SIZE) if length < 0: raise LuksError("length must be positive") self.file.truncate(int(self.payloadOffset * self.SECTOR_SIZE) + length) def encrypt_data(self, offset, data): """Encrypt data into the file. Offset is a zero indexed location in the data to write. Both offset and len(data) must be multiples of 512. """ # Check conditions if self.masterKey == None: raise LuksError("A key has not been unlocked. Call open_any_key() first.") if offset % self.SECTOR_SIZE != 0: raise LuksError("offset must be a multiple of %s" % self.SECTOR_SIZE) dataLen = len(data) if dataLen % self.SECTOR_SIZE != 0: raise LuksError("data length must be a multiple of %s" % self.SECTOR_SIZE) # Encrypt all the data startSector = int(offset / self.SECTOR_SIZE) endSector = int((offset + dataLen) / self.SECTOR_SIZE) for sector in range(startSector, endSector): dslice_sector = sector - startSector dslice = data[int(dslice_sector * self.SECTOR_SIZE):int((dslice_sector+1)*self.SECTOR_SIZE)] self._encrypt_sector(self.masterKey, self.payloadOffset + sector, sector, dslice) def decrypt_data(self, offset, length): """Decrypt data from the file. Offset is a zero indexed location into the data, and length is the ammout of data to return. offset and length can be any value, but multiples of 512 are the most efficient. """ if self.masterKey == None: raise LuksError("A key has not been unlocked. Call open_any_key() first.") frontPad = int(offset % self.SECTOR_SIZE) startSector = int(math.floor(offset / self.SECTOR_SIZE)) endSector = int(math.ceil((offset + length) / self.SECTOR_SIZE)) ret = b"" for sector in range(startSector, endSector): ret += self._decrypt_sector(self.masterKey, self.payloadOffset + sector, sector) return ret[frontPad:frontPad+length] # Private functions class _key_block: """Internal class, used to store the key information about each key.""" LUKS_KEY_FORMAT = ">II32sII" def load_from_str(self, str): """Unpack the key information from a string""" self.active, \ self.passwordIterations, \ self.passwordSalt, \ self.keyMaterialOffset, \ self.stripes = \ struct.unpack(self.LUKS_KEY_FORMAT, str) def create(self, offset, stripes, disabled): """Create a new set of key information. Called from LuksFile.create()""" self.active = disabled self.passwordIterations = 0 self.passwordSalt = b'' self.keyMaterialOffset = int(offset) self.stripes = stripes def save(self): """Pack the key information into a string""" return struct.pack(self.LUKS_KEY_FORMAT, self.active, self.passwordIterations, \ self.passwordSalt, self.keyMaterialOffset, self.stripes) class _plain_iv_gen: """Internal class to represent cbc-plain cipherMode""" def set_key(self, key): # plain IV generation does not use the key in any way pass def generate(self, sectorOffset, size): istr = struct.pack(" cipherMode""" # essiv mode is defined by # SALT=Hash(KEY) # IV=E(SALT,sectornumber) def __init__(self, str, cipher, luksParent): self.hashSpec = str[1:] self.cipher = cipher def set_key(self, key): h = hashlib.new(self.hashSpec, key) self.salt = h.digest() self.encr = self.cipher.new(self.salt, self.cipher.MODE_ECB) def generate(self, sectorOffset, size): istr = struct.pack("IHHH6s", buf) seq = (seq & 0x3FFF) | 0x8000 hi_and_version = (hi_and_version & 0x0FFF) | 0x4000 uuid = struct.pack(">IHHH6s", low, mid, hi_and_version, seq, node) low, mid, hi, seq, b5, b4, b3, b2, b1, b0 = struct.unpack(">IHHHBBBBBB", uuid) self.uuid = b"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x" % (low, mid, hi, seq >> 8, seq & 0xFF, b5, b4, b3, b2, b1, b0) def _save_header(self): """Internal function to save the header info into the file""" str = struct.pack(self.LUKS_FORMAT, self.magic, self.version, self.cipherName.encode(), self.cipherMode.encode(), self.hashSpec.encode(), \ self.payloadOffset, self.keyBytes, self.mkDigest, self.mkDigestSalt, self.mkDigestIterations, self.uuid) self.file.seek(0) self.file.write(str) for i in range(0, 8): self.file.write(self.keys[i].save()) try: self.file.flush() os.fsync(self.file.fileno()) except: # We might get an error because self.file.fileno() does not exist on StringIO pass def _encrypt_sector(self, key, sector, sectorOffset, data): """Internal function to encrypt a single sector""" if len(data) > self.SECTOR_SIZE: raise LuksError("_encrypt_page only accepts data of size <= %i" % self.SECTOR_SIZE) # Encrypt the data using the cipher, iv generation, and mode IV = self.ivGen.generate(sectorOffset, self.cipher.block_size) cipher = self.cipher.new(key, self.mode, IV) encrData = cipher.encrypt(data) # Write the encrypted data to disk self.file.seek(int(sector * self.SECTOR_SIZE)) self.file.write(encrData) def _decrypt_sector(self, key, sector, sectorOffset): """Internal function to decrypt a single sector""" # Read the ciphertext from disk self.file.seek(int(sector * self.SECTOR_SIZE)) encrData = self.file.read(int(self.SECTOR_SIZE)) # Decrypt the data using cipher, iv generation, and mode IV = self.ivGen.generate(sectorOffset, self.cipher.block_size) cipher = self.cipher.new(key, self.mode, IV) return cipher.decrypt(encrData) # The following was copied from the reference implementation of LUKS in cryptsetup-luks-1.0.1 from # http://luks.endorphin.org/dm-crypt # define LUKS_CIPHERNAME_L 32 # define LUKS_CIPHERMODE_L 32 # define LUKS_HASHSPEC_L 32 # define LUKS_DIGESTSIZE 20 // since SHA1 # define LUKS_HMACSIZE 32 # define LUKS_SALTSIZE 32 # define LUKS_NUMKEYS 8 # define LUKS_MAGIC_L 6 # /* Actually we need only 37, but we don't want struct autoaligning to kick in */ # define UUID_STRING_L 40 # struct luks_phdr { # char magic[LUKS_MAGIC_L]; # uint16_t version; # char cipherName[LUKS_CIPHERNAME_L]; # char cipherMode[LUKS_CIPHERMODE_L]; # char hashSpec[LUKS_HASHSPEC_L]; # uint32_t payloadOffset; # uint32_t keyBytes; # char mkDigest[LUKS_DIGESTSIZE]; # char mkDigestSalt[LUKS_SALTSIZE]; # uint32_t mkDigestIterations; # char uuid[UUID_STRING_L]; # # struct { # uint32_t active; # # /* parameters used for password processing */ # uint32_t passwordIterations; # char passwordSalt[LUKS_SALTSIZE]; # # /* parameters used for AF store/load */ # uint32_t keyMaterialOffset; # uint32_t stripes; # } keyblock[LUKS_NUMKEYS]; # }; # size is 208 bytes + 48 * LUKS_NUMKEYS = 592 bytes revelation-revelation-0.5.5/src/lib/000077500000000000000000000000001423125252400173745ustar00rootroot00000000000000revelation-revelation-0.5.5/src/lib/__init__.py000066400000000000000000000024011423125252400215020ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Library initialization script # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import util from . import config from . import datahandler from . import io from . import entry from . import data from . import ui from . import dialog # set up some exceptions class Error(Exception): """Base class for errors""" pass class CancelError(Error): """Exception for user cancellation""" pass class FileError(Error): """Exception for file errors""" pass revelation-revelation-0.5.5/src/lib/config.py.in000066400000000000000000000044211423125252400216210ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # module for configuration handling # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import util import gettext _ = gettext.gettext DIR_ICONS = "@pkgdatadir@/icons" DIR_LOCALE = "@datadir@/locale" DIR_UI = "@pkgdatadir@" DIR_GSCHEMAS = "@pkgdatadir@/schemas" APPNAME = "Revelation" PACKAGE = "@PACKAGE@" VERSION = "@VERSION@" DATAVERSION = 2 RELNAME = "Txoria nintzela sinistu nuen, sinistu" URL = "https://revelation.olasagasti.info/" AUTHORS = [ "Erik Grinaker ","Mikel Olasagasti Uranga " ] ARTISTS = [ "Erik Grinaker " ] COPYRIGHT = _('Copyright') + " \251 2003-2007 Erik Grinaker\n2010-2022 Mikel Olasagasti Uranga" LICENSE = _("""Revelation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Revelation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Revelation; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA""") class ConfigError(Exception): "Configuration error exception" pass revelation-revelation-0.5.5/src/lib/data.py000066400000000000000000000422551423125252400206670ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module containing data-related functionality # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import datahandler, entry from gi.repository import GObject, Gtk, Gdk, GLib import time COLUMN_NAME = 0 COLUMN_ICON = 1 COLUMN_ENTRY = 2 SEARCH_NEXT = "next" SEARCH_PREVIOUS = "prev" class Clipboard(GObject.GObject): "A normal text-clipboard" def __init__(self): GObject.GObject.__init__(self) self.clip_clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.clip_primary = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY) self.cleartimer = Timer(10) self.cleartimeout = 60 self.cleartimer.connect("ring", self.__cb_clear_ring) self.content = None self.contentpointer = 0 def __cb_clear(self, clipboard, data = None): "Clears the clipboard data" self.clip_clipboard.clear() self.clip_primary.clear() def __cb_clear_ring(self, widget): "Handles cleartimer rings" self.content = None self.contentpointer = 0 self.set("", False) def __cb_get(self, clipboard, selectiondata, info, data): "Returns text for clipboard requests" if self.content is None: text = "" elif type(self.content) == list: if len(self.content) == 0: text = "" else: text = self.content[self.contentpointer] if self.contentpointer < len(self.content) - 1: self.contentpointer += 1 else: text = str(self.content) selectiondata.set_text(text, len(text)) def clear(self): "Clears the clipboard" self.clip_clipboard.clear() self.clip_primary.clear() def get(self): "Fetches text from the clipboard" text = self.clip_clipboard.wait_for_text() if text is None: text = "" return text def has_contents(self): "Checks if the clipboard has any contents" return self.clip_clipboard.wait_is_text_available() def set(self, content, secret = False): "Copies text to the clipboard" self.content = content self.contentpointer = 0 targets = [ Gtk.TargetEntry.new("text/plain", 0, 0), Gtk.TargetEntry.new("STRING", 0, 0), Gtk.TargetEntry.new("TEXT", 0, 0), Gtk.TargetEntry.new("COMPOUND_TEXT", 0, 0), Gtk.TargetEntry.new("UTF8_STRING", 0, 0) ] self.clip_clipboard.set_text(' '.join(self.content), -1) self.clip_primary.set_text(' '.join(self.content), -1) if secret == True: self.cleartimer.start(self.cleartimeout) else: self.cleartimer.stop() class EntryClipboard(GObject.GObject): "A clipboard for entries" def __init__(self): GObject.GObject.__init__(self) self.clipboard = Gtk.Clipboard.get_for_display(display=Gdk.Display.get_default(), selection=Gdk.Atom.intern("_REVELATION_ENTRY", False)) self.__has_contents = False GLib.timeout_add(500, lambda: self.__check_contents()) def __check_contents(self): "Callback which check the clipboard" state = self.has_contents() if state != self.__has_contents: self.emit("content-toggled", state) self.__has_contents = state return True def clear(self): "Clears the clipboard" self.clipboard.clear() self.__check_contents() def get(self): "Fetches entries from the clipboard" try: xml = self.clipboard.wait_for_text() if xml in (None, ""): return None handler = datahandler.RevelationXML() entrystore = handler.import_data(xml) return entrystore except datahandler.HandlerError: return None def has_contents(self): "Checks if the clipboard has any contents" return self.clipboard.wait_for_text() is not None def set(self, entrystore, iters): "Copies entries from an entrystore to the clipboard" copystore = EntryStore() for iter in entrystore.filter_parents(iters): copystore.import_entry(entrystore, iter) xml = datahandler.RevelationXML().export_data(copystore) self.clipboard.set_text(xml, -1) self.__check_contents() GObject.signal_new("content-toggled", EntryClipboard, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, (GObject.TYPE_BOOLEAN, )) class EntrySearch(GObject.GObject): "Handles searching in an EntryStore" def __init__(self, entrystore): GObject.GObject.__init__(self) self.entrystore = entrystore self.folders = True self.namedesconly = False self.casesensitive = False def find(self, string, entrytype = None, offset = None, direction = SEARCH_NEXT): "Searches for an entry, starting at the given offset" iter = offset while True: if direction == SEARCH_NEXT: iter = self.entrystore.iter_traverse_next(iter) else: iter = self.entrystore.iter_traverse_prev(iter) # if we've wrapped around, return None if self.entrystore.get_path(iter) == self.entrystore.get_path(offset): return None if self.match(iter, string, entrytype) == True: return iter def find_all(self, string, entrytype = None): "Searches for all entries matching a term" matches = [] iter = self.entrystore.iter_children(None) while iter != None: if self.match(iter, string, entrytype) == True: matches.append(iter) iter = self.entrystore.iter_traverse_next(iter) return matches def match(self, iter, string, entrytype = None): "Check if an entry matches the search criteria" if iter is None or not string: return False e = self.entrystore.get_entry(iter) # check entry type if type(e) == entry.FolderEntry and self.folders == False: return False if entrytype is not None and type(e) not in (entrytype, entry.FolderEntry): return False # check entry fields items = [e.name, e.description, e.notes] if self.namedesconly == False: items.extend([field.value for field in e.fields if field.value != ""]) # run the search for item in items: if self.casesensitive == True and string in item: return True elif self.casesensitive == False and string.lower() in item.lower(): return True return False class EntryStore(Gtk.TreeStore): "A data structure for storing entries" def __init__(self): Gtk.TreeStore.__init__( self, GObject.TYPE_STRING, # name GObject.TYPE_STRING, # icon GObject.TYPE_PYOBJECT # entry ) self.changed = False self.connect("row-has-child-toggled", self.__cb_iter_has_child) self.set_sort_func(COLUMN_NAME, self.__cmp) self.set_sort_column_id(COLUMN_NAME, Gtk.SortType.ASCENDING) def __cmp(self, treemodel, iter1, iter2, user_data=None): name1 = treemodel.get_value(iter1, COLUMN_NAME).strip().lower() name2 = treemodel.get_value(iter2, COLUMN_NAME).strip().lower() return (name1 > name2) - (name1 < name2) def __cb_iter_has_child(self, widget, path, iter): "Callback for iters having children" if self.iter_n_children(iter) == 0: self.folder_expanded(iter, False) def add_entry(self, e, parent = None, sibling = None): "Adds an entry" # place after parent if it's not a folder if parent is not None and type(self.get_entry(parent)) != entry.FolderEntry: iter = self.insert_after(self.iter_parent(parent), parent) # place before sibling, if given elif sibling is not None: iter = self.insert_before(parent, sibling) # otherwise, append to parent else: iter = self.append(parent) self.update_entry(iter, e) self.changed = True return iter def clear(self): "Removes all entries" Gtk.TreeStore.clear(self) self.changed = False def copy_entry(self, iter, parent = None, sibling = None): "Copies an entry recursively" newiter = self.add_entry(self.get_entry(iter), parent, sibling) for i in range(self.iter_n_children(iter)): child = self.iter_nth_child(iter, i) self.copy_entry(child, newiter) return newiter def filter_parents(self, iters): "Removes all descendants from the list of iters" parents = [] for child in iters: for parent in iters: if self.is_ancestor(parent, child): break else: parents.append(child) return parents def folder_expanded(self, iter, expanded): "Sets the expanded state of an entry" e = self.get_entry(iter) if e is None or type(e) != entry.FolderEntry: return elif expanded == True: self.set_value(iter, COLUMN_ICON, e.openicon) else: self.set_value(iter, COLUMN_ICON, e.icon) def get_entry(self, iter): "Fetches data for an entry" if iter is None: return None e = self.get_value(iter, COLUMN_ENTRY) if e is None: return None else: return e.copy() def get_iter(self, path): "Gets an iter from a path" try: if not path: return None if isinstance(path, list): path = tuple(path) return Gtk.TreeStore.get_iter(self, path) except ValueError: return None def get_path(self, iter): "Gets a path from an iter" return iter is not None and Gtk.TreeStore.get_path(self, iter) or None def get_popular_values(self, fieldtype, threshold = 3): "Gets popular values for a field type" valuecount = {} iter = self.iter_nth_child(None, 0) while iter is not None: e = self.get_entry(iter) if e.has_field(fieldtype) == False: iter = self.iter_traverse_next(iter) continue value = e[fieldtype].strip() if value != "": if value not in valuecount: valuecount[value] = 0 valuecount[value] += 1 iter = self.iter_traverse_next(iter) popular = [value for value, count in valuecount.items() if count >= threshold] popular.sort() return popular def import_entry(self, source, iter, parent = None, sibling = None): "Recursively copies an entry from a different entrystore" if iter is not None: copy = self.add_entry(source.get_entry(iter), parent, sibling) parent, sibling = copy, None else: copy = None newiters = [] for i in range(source.iter_n_children(iter)): child = source.iter_nth_child(iter, i) newiter = self.import_entry(source, child, parent, sibling) newiters.append(newiter) return copy is not None and copy or newiters def iter_traverse_next(self, iter): "Gets the 'logically next' iter" # get the first child, if any child = self.iter_nth_child(iter, 0) if child is not None: return child # check for a sibling or, if not found, a sibling of any ancestors parent = iter while parent is not None: sibling = parent.copy() sibling = self.iter_next(sibling) if sibling is not None: return sibling parent = self.iter_parent(parent) return None def iter_traverse_prev(self, iter): "Gets the 'logically previous' iter" # get the previous sibling, or parent, of the iter - if any if iter is not None: parent = self.iter_parent(iter) index = self.get_path(iter)[-1] # if no sibling is found, return the parent if index == 0: return parent # otherwise, get the sibling iter = self.iter_nth_child(parent, index - 1) # get the last, deepest child of the sibling or root, if any while self.iter_n_children(iter) > 0: iter = self.iter_nth_child(iter, self.iter_n_children(iter) - 1) return iter def move_entry(self, iter, parent = None, sibling = None): "Moves an entry" newiter = self.copy_entry(iter, parent, sibling) self.remove_entry(iter) return newiter def remove_entry(self, iter): "Removes an entry, and its children if any" if iter is None: return None self.remove(iter) self.changed = True def update_entry(self, iter, e): "Updates an entry" if None in (iter, e): return None self.set_value(iter, COLUMN_NAME, e.name) self.set_value(iter, COLUMN_ICON, e.icon) self.set_value(iter, COLUMN_ENTRY, e.copy()) self.changed = True class Timer(GObject.GObject): "Handles timeouts etc" def __init__(self, resolution = 1): GObject.GObject.__init__(self) self.offset = None self.timeout = None GLib.timeout_add(resolution * 1000, self.__cb_check) def __cb_check(self): "Checks if the timeout has been reached" if None not in (self.offset, self.timeout) and int(time.time()) >= (self.offset + self.timeout): self.stop() self.emit("ring") return True def reset(self): "Resets the timer" if self.offset != None: self.offset = int(time.time()) def start(self, timeout): "Starts the timer" if timeout == 0: self.stop() else: self.offset = int(time.time()) self.timeout = timeout def stop(self): "Stops the timer" self.offset = None self.timeout = None GObject.signal_new("ring", Timer, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, ()) class UndoQueue(GObject.GObject): "Handles undo/redo tracking" def __init__(self): GObject.GObject.__init__(self) self.queue = [] self.pointer = 0 def add_action(self, name, cb_undo, cb_redo, actiondata): "Adds an action to the undo queue" del self.queue[self.pointer:] self.queue.append((name, cb_undo, cb_redo, actiondata)) self.pointer = len(self.queue) self.emit("changed") def can_redo(self): "Checks if a redo action is possible" return self.pointer < len(self.queue) def can_undo(self): "Checks if an undo action is possible" return self.pointer > 0 def clear(self): "Clears the queue" self.queue = [] self.pointer = 0 self.emit("changed") def get_redo_action(self): "Returns data for the next redo operation" if self.can_redo() == False: return None name, cb_undo, cb_redo, actiondata = self.queue[self.pointer] return cb_redo, name, actiondata def get_undo_action(self): "Returns data for the next undo operation" if self.can_undo() == False: return None name, cb_undo, cb_redo, actiondata = self.queue[self.pointer - 1] return cb_undo, name, actiondata def redo(self): "Executes a redo operation" if self.can_redo() == False: return None cb_redo, name, actiondata = self.get_redo_action() self.pointer += 1 cb_redo(name, actiondata) self.emit("changed") def undo(self): "Executes an undo operation" if self.can_undo() == False: return None cb_undo, name, actiondata = self.get_undo_action() self.pointer -= 1 cb_undo(name, actiondata) self.emit("changed") GObject.type_register(UndoQueue) GObject.signal_new("changed", UndoQueue, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, ()) revelation-revelation-0.5.5/src/lib/datahandler/000077500000000000000000000000001423125252400216435ustar00rootroot00000000000000revelation-revelation-0.5.5/src/lib/datahandler/__init__.py000066400000000000000000000045731423125252400237650ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for data handlers # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from .base import Error, DataError, FormatError, PasswordError, VersionError from .csvfile import CSV, Bitwarden from .fpm import FPM from .gpass import GPass04, GPass05 from .keepassxc import KeepassXCCSV from .netrc import NetRC from .pwsafe import PasswordSafe1, PasswordSafe2, MyPasswordSafe, MyPasswordSafeOld, PasswordGorilla from .rvl import RevelationXML, Revelation, Revelation2, RevelationLUKS from .splashid import SplashIDCSV from .text import PlainText from .xhtml import XHTML HANDLERS = [ CSV, Bitwarden, FPM, GPass04, GPass05, KeepassXCCSV, MyPasswordSafe, MyPasswordSafeOld, NetRC, PasswordGorilla, PasswordSafe1, PasswordSafe2, PlainText, Revelation, Revelation2, RevelationLUKS, SplashIDCSV, XHTML, RevelationXML ] class DetectError(Error): "Exception for autodetection error" pass def detect_handler(input): "Detects which handler may process a data stream" for handler in get_import_handlers(): if handler().detect(input) == True: return handler else: raise DetectError def get_export_handlers(): "Returns a list of handlers which can export" handlers = [] for handler in HANDLERS: if handler.exporter: handlers.append(handler) return handlers def get_import_handlers(): "Returns a list of handlers which can import" handlers = [] for handler in HANDLERS: if handler.importer: handlers.append(handler) return handlers revelation-revelation-0.5.5/src/lib/datahandler/base.py000066400000000000000000000036431423125252400231350ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for basic datahandler functionality # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # class Error(Exception): "Base exception for data handler" pass class DataError(Error): "Exception for invalid data" pass class FormatError(Error): "Exception for invalid file formats" pass class PasswordError(Error): "Exception for wrong password" pass class VersionError(Error): "Exception for unknown versions" pass class DataHandler(object): "A datahandler base class, real datahandlers are subclassed from this" name = None importer = False exporter = False encryption = False def __init__(self): pass def check(self, input): "Fallback method, subclasses should override this" pass def detect(self, input): "Fallback method, subclasses should override this" return False def export_data(self, entrystore, password): "Fallback method, subclasses should override this" return "" def import_data(self, input, password): "Fallback method, subclasses should override this" pass revelation-revelation-0.5.5/src/lib/datahandler/csvfile.py000066400000000000000000000137451423125252400236620ustar00rootroot00000000000000# Gergely Nagy # from . import base from revelation import entry import time import csv from io import StringIO class CSV(base.DataHandler): "Data handler for CSV files" name = "Comma Separated Values (CSV)" importer = False exporter = True encryption = False def __init__(self): base.DataHandler.__init__(self) def export_data(self, entrystore, password = None): "Exports data to a CSV file" # fetch and sort entries entries = [] iter = entrystore.iter_nth_child(None, 0) while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: entries.append(e) iter = entrystore.iter_traverse_next(iter) stringwriter = StringIO() csvwriter = csv.writer(stringwriter, dialect="excel") keys = set() for e in entries: for f in e.fields: keys.add(f.name) # 'Email', 'Hostname', 'Password', 'URL', 'Username' keys = sorted(keys) csvwriter.writerow(['Name', 'Type', 'Description', 'Updated'] + keys) for e in entries: values = [] for key in keys: value = '' for field in e.fields: if key == field.name: value = field.value values.append(value) updated = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(e.updated)) csvwriter.writerow([e.name, e.typename, e.description, updated] + values) return stringwriter.getvalue() class Bitwarden(base.DataHandler): "Data handler for Bitwarden Web Vault (CSV file)" name = "Bitwarden Web Vault (CSV)" importer = False exporter = True encryption = False bitwarden_csv_header_keys = [ 'folder', 'favorite', 'type', 'name', 'notes', 'fields', 'login_uri', 'login_username', 'login_password', 'login_totp', ] # revelation type -> Bitwarden type type_mapping = { 'Creditcard': 'note', # Bitwarden type 'card' exists but seems unmanaged. 'Crypto Key': 'login', 'Database': 'login', 'Door lock': 'note', 'Email': 'login', 'FTP': 'login', 'Generic': 'login', 'Phone': 'note', 'Remote Desktop': 'login', 'Shell': 'login', 'VNC': 'login', 'Website': 'login', } # revelation field -> Bitwarden field field_mapping = { 'Name': 'name', 'Type': 'type', 'Description': 'notes', 'Updated': 'notes', 'CCV number': 'notes', 'Card number': 'notes', 'Card type': 'notes', 'Certificate': 'notes', 'Code': 'notes', 'Database': 'notes', 'Domain': 'notes', 'Email': 'notes', 'Expiry date': 'notes', 'Hostname': 'login_uri', 'Key File': 'notes', 'Location': 'notes', 'PIN': 'notes', 'Password': 'login_password', 'Phone number': 'notes', 'Port number': 'notes', 'URL': 'login_uri', 'Username': 'login_username', } date_format = "%Y-%m-%d %H:%M:%S" def __init__(self): base.DataHandler.__init__(self) def export_data(self, entrystore, password = None): "Exports data to a Bitwarden CSV file" # fetch and sort entries entries = [] iter = entrystore.iter_nth_child(None, 0) stringwriter = StringIO() csvwriter = csv.writer(stringwriter, dialect="excel") csvwriter.writerow(self.bitwarden_csv_header_keys) while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: # Find the directory path of this item. path = '' parent = entrystore.iter_parent(iter) while parent: path = entrystore.get_entry(parent).name + '/' + path parent = entrystore.iter_parent(parent) values = [] for key in self.bitwarden_csv_header_keys: # Special fields if key == 'folder': values.append(path) continue if key == 'favorite': values.append('') continue if key == 'name': values.append(e.name) continue if key == 'type': values.append(self.type_mapping[e.typename]) continue value = '' # Add export time as a note by default. # Add e.description as a note. # Add revelation updated time as a note. if key == 'notes': now = time.strftime(self.date_format, time.localtime()) updated = time.strftime(self.date_format, time.localtime(e.updated)) value += "Exported from Revelation on %s\n" % now value += "Last Revelation Update: %s\n" % updated if e.description: value += "Description: %s\n" % e.description if e.notes != '': value += "Revelation Notes: %s\n" % e.notes for field in e.fields: if key == self.field_mapping[field.name]: if self.field_mapping[field.name] == 'notes' and field.value: value += '%s: %s\n' % (field.name, field.value) else: value += field.value values.append(value) csvwriter.writerow(values) iter = entrystore.iter_traverse_next(iter) return stringwriter.getvalue() revelation-revelation-0.5.5/src/lib/datahandler/fpm.py000066400000000000000000000207411423125252400230030ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for handling Figaro's Password Manager data # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import data, entry, util import math import secrets import string import defusedxml.minidom from xml.parsers.expat import ExpatError from Cryptodome.Cipher import Blowfish from Cryptodome.Hash import MD5 import Cryptodome.Random as Random class FPM(base.DataHandler): "Data handler for Figaro's Password Manager data" name = "Figaro's Password Manager" importer = True exporter = True encryption = True def __init__(self): base.DataHandler.__init__(self) def __decrypt(self, cipher, data): "Decrypts data" if isinstance(data, str): data = data.encode() # decode ascii armoring decoded = b"" for i in range(len(data) // 2): high = data[2 * i] - ord("a") low = data[2 * i + 1] - ord("a") decoded += bytes((high * 16 + low,)) data = decoded # decrypt data data = cipher.decrypt(data) # unrotate field blocks = int(math.ceil(len(data) / float(8))) plain = b"" for offset in range(8): for block in range(blocks): plain += bytes((data[block * 8 + offset],)) return plain.split(b"\x00")[0] def __encrypt(self, cipher, data): "Encrypts data" # get data sizes blocks = (len(data) // 7) + 1 size = 8 * blocks # add noise rand = Random.new() data += b'\x00' + rand.read(size - len(data) - 1) # rotate data rotated = b"" for block in range(blocks): for offset in range(8): rotated += bytes((data[offset * blocks + block],)) data = rotated # encrypt data data = cipher.encrypt(data) # ascii-armor data res = b"" for i in range(len(data)): high = data[i] // 16 low = data[i] - high * 16 res += bytes((ord("a") + high, ord("a") + low)) data = res return data def check(self, input): "Checks if the data is valid" try: if input is None: raise base.FormatError dom = defusedxml.minidom.parseString(input.strip()) if dom.documentElement.nodeName != "FPM": raise base.FormatError minversion = dom.documentElement.attributes["min_version"].nodeValue if int(minversion.split(".")[1]) > 58: raise base.VersionError except ExpatError: raise base.FormatError except (KeyError, IndexError): raise base.FormatError def detect(self, input): "Checks if this handler can handle the given data" try: self.check(input) return True except (base.FormatError, base.VersionError, base.DataError): return False def export_data(self, entrystore, password): "Exports data from an entrystore" # set up encryption engine alphabet = string.ascii_letters + string.digits salt = bytes([''.join(secrets.choice(alphabet) for i in range(8))]) password = MD5.new(salt + password.encode()).digest() # nosec cipher = Blowfish.new(password, Blowfish.MODE_ECB) # nosec # generate data xml = "\n" xml += "\n" xml += " \n" % (salt.decode(), self.__encrypt(cipher, b"FIGARO").decode()) xml += " \n" xml += " \n" iter = entrystore.iter_children(None) while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: e = e.convert_generic() xml += " \n" xml += " %s\n" % self.__encrypt(cipher, e.name.encode()).decode() xml += " %s\n" % self.__encrypt(cipher, e.get_field(entry.HostnameField).value.encode()).decode() xml += " %s\n" % self.__encrypt(cipher, e.get_field(entry.UsernameField).value.encode()).decode() xml += " %s\n" % self.__encrypt(cipher, e.get_field(entry.PasswordField).value.encode()).decode() xml += " %s\n" % self.__encrypt(cipher, e.description.encode()).decode() path = entrystore.get_path(iter).to_string() if len(path) > 1: foldername = entrystore.get_entry(entrystore.get_iter(path[0])).name xml += " %s\n" % self.__encrypt(cipher, foldername.encode()).decode() else: xml += " \n" xml += " \n" xml += " \n" iter = entrystore.iter_traverse_next(iter) xml += " \n" xml += "\n" return xml def import_data(self, input, password): "Imports data into an entrystore" try: # check and load data self.check(input) dom = defusedxml.minidom.parseString(input.strip()) if dom.documentElement.nodeName != "FPM": raise base.FormatError # set up decryption engine, and check if password is correct keynode = dom.documentElement.getElementsByTagName("KeyInfo")[0] salt = keynode.attributes["salt"].nodeValue.encode() vstring = keynode.attributes["vstring"].nodeValue.encode() password = MD5.new(salt + password.encode()).digest() # nosec cipher = Blowfish.new(password, Blowfish.MODE_ECB) # nosec if self.__decrypt(cipher, vstring) != b"FIGARO": raise base.PasswordError except ExpatError: raise base.FormatError except (IndexError, KeyError): raise base.FormatError # import entries into entrystore entrystore = data.EntryStore() folders = {} for node in dom.getElementsByTagName("PasswordItem"): parent = None e = entry.GenericEntry() for fieldnode in [node for node in node.childNodes if node.nodeType == node.ELEMENT_NODE]: content = self.__decrypt(cipher, util.dom_text(fieldnode)).decode() if content == "": continue elif fieldnode.nodeName == "title": e.name = content elif fieldnode.nodeName == "user": e.get_field(entry.UsernameField).value = content elif fieldnode.nodeName == "url": e.get_field(entry.HostnameField).value = content elif fieldnode.nodeName == "password": e.get_field(entry.PasswordField).value = content elif fieldnode.nodeName == "notes": e.description = content elif fieldnode.nodeName == "category": if content in folders: parent = folders[content] else: folderentry = entry.FolderEntry() folderentry.name = content parent = entrystore.add_entry(folderentry) folders[content] = parent entrystore.add_entry(e, parent) return entrystore revelation-revelation-0.5.5/src/lib/datahandler/gpass.py000066400000000000000000000264011423125252400233350ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id: gpass.py 602 2007-01-03 08:06:28Z erikg $ # # Module for handling GPass data # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import data, entry import locale import re from Cryptodome.Cipher import Blowfish from Cryptodome.Hash import SHA IV = b"\x05\x17\x01\x7b\x0c\x03\x36\x5e" def decrypt(ciphertext, password, magic = None): "Decrypts a data stream" # decrypt data if len(ciphertext) % 8 != 0: raise base.FormatError key = SHA.new(password.encode()).digest() # nosec cipher = Blowfish.new(key, Blowfish.MODE_CBC, IV) # nosec plaintext = cipher.decrypt(ciphertext) # check magic string if magic != None: if plaintext[:len(magic)] != magic: raise base.PasswordError else: plaintext = plaintext[len(magic):] # remove padding padchar = plaintext[-1] npadchar = padchar if (npadchar > 0): if plaintext[-npadchar:] != bytes([padchar] * npadchar): raise base.FormatError plaintext = plaintext[:-npadchar] return plaintext def encrypt(plaintext, password): "Encrypts a data stream" # right-pad data padlen = 8 - len(plaintext) % 8 if padlen == 0: padlen = 8 plaintext += bytes([padlen] * padlen) # encrypt data key = SHA.new(password.encode()).digest() # nosec cipher = Blowfish.new(key, Blowfish.MODE_CBC, IV) # nosec return cipher.encrypt(plaintext) class GPass04(base.DataHandler): "Data handler for GPass 0.4.x data" name = "GPass 0.4.x" importer = True exporter = True encryption = True def __init__(self): base.DataHandler.__init__(self) def export_data(self, entrystore, password): "Exports data to a data stream" data = "GNOME Password Manager\n" iter = entrystore.iter_nth_child(None, 0) while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: e = e.convert_generic() data += e.name + "\n" data += (e[entry.UsernameField] or "") + "\n" data += (e[entry.PasswordField] or "") + "\n" data += (e[entry.HostnameField] or "") + "\n" data += str(e.updated) + "\n" data += str(e.updated) + "\n" data += "0\n" data += str(len(e.description) + 1) + "\n" data += e.description + "\n" iter = entrystore.iter_traverse_next(iter) return encrypt(data.encode(), password) def import_data(self, input, password): "Imports data from a data stream to an entrystore" plaintext = decrypt(input, password, b"GNOME Password Manager\n").decode() entrystore = data.EntryStore() lines = plaintext.splitlines() while len(lines) > 0: e = entry.GenericEntry() e.name = lines[0] e[entry.UsernameField] = lines[1] e[entry.PasswordField] = lines[2] e[entry.HostnameField] = lines[3] e.updated = int(lines[5]) desclen = int(lines[7]) if e[entry.HostnameField] == "http://": e[entry.HostnameField] = "" del lines[:8] d = "" while len(d) < desclen and len(lines) > 0: d += lines[0] + "\n" del lines[0] e.description = re.sub("[\r\n]+", " ", d).strip() entrystore.add_entry(e) return entrystore class GPass05(base.DataHandler): "Data handler for GPass 0.5.x data" name = "GPass 0.5.x (or newer)" importer = True exporter = True encryption = True def __init__(self): base.DataHandler.__init__(self) def __getint(self, input): "Fetches an integer from the input" if len(input) < 4: raise base.FormatError return input[0] << 0 | input[1] << 8 | input[2] << 16 | input[3] << 24 def __getstr(self, input): "Fetches a string from the input" length = self.__getint(input[:4]) if len(input) < (4 + length): raise base.FormatError string = input[4:4 + length] if len(string) != length: raise base.FormatError return string def __mkint(self, input): "Creates a string-representation of an integer" string = b"" for i in range(4): string += bytes([input >> i * 8 & 0xff]) return string def __mkstr(self, input): "Makes a string suitable for inclusion in the data stream" return self.__mkint(len(input)) + input def __normstr(self, string): "Normalizes a string" string = re.sub(b"[\r\n]+", b" ", string) return string.decode() def __packint(self, input): "Packs an integer" if input == 0: return b"\x00" string = b"" while input > 0: c = input % 0x80 input = input // 0x80 if input > 0: c |= 0x80 string += bytes([c]) return string def __packstr(self, input): "Packs a string" return self.__packint(len(input.encode())) + input.encode() def __unpackint(self, input): "Fetches a packed number from the input" value = 0 b = 1 for i in range(min(len(input), 6)): c = input[i] if c & 0x80: value += b * (c & 0x7f) b *= 0x80 else: value += b * c return i + 1, value # if we didn't return in the for-loop, the input is invalid else: raise base.FormatError def __unpackstr(self, input): "Unpacks a string from the input" cut, length = self.__unpackint(input[:6]) if len(input) < cut + length: raise base.FormatError return cut + length, input[cut:cut + length] def export_data(self, entrystore, password): "Exports data from an entrystore" plaintext = b"GPassFile version 1.1.0" iter = entrystore.iter_children(None) id = 0 foldermap = {} while iter != None: id += 1 path = entrystore.get_path(iter).to_string() parentpath = ':'.join(path.split(':')[:-1]) if len(parentpath) > 0 and parentpath in foldermap: parentid = foldermap[parentpath] else: parentid = 0 e = entrystore.get_entry(iter) if type(e) == entry.FolderEntry: foldermap[path] = id elif type(e) != entry.GenericEntry: e = e.convert_generic() entrydata = b"" entrydata += self.__mkint(id) entrydata += self.__mkint(parentid) entrydata += self.__mkstr(type(e) == entry.FolderEntry and b"folder" or b"general") attrdata = b"" attrdata += self.__packstr(e.name) attrdata += self.__packstr(e.description) attrdata += self.__packint(e.updated) attrdata += self.__packint(e.updated) attrdata += self.__packint(0) attrdata += self.__packint(0) if type(e) == entry.GenericEntry: attrdata += self.__packstr(e[entry.UsernameField] or "") attrdata += self.__packstr(e[entry.PasswordField] or "") attrdata += self.__packstr(e[entry.HostnameField] or "") entrydata += self.__mkstr(attrdata) plaintext += entrydata iter = entrystore.iter_traverse_next(iter) return encrypt(plaintext, password) def import_data(self, input, password): "Imports data from a data stream to an entrystore" plaintext = decrypt(input, password, b"GPassFile version 1.1.0") entrystore = data.EntryStore() foldermap = {} while len(plaintext) > 0: # parse data id = self.__getint(plaintext[:4]) plaintext = plaintext[4:] parentid = self.__getint(plaintext[:4]) plaintext = plaintext[4:] entrytype = self.__getstr(plaintext) plaintext = plaintext[4 + len(entrytype):] attrdata = self.__getstr(plaintext) plaintext = plaintext[4 + len(attrdata):] l, name = self.__unpackstr(attrdata) attrdata = attrdata[l:] l, desc = self.__unpackstr(attrdata) attrdata = attrdata[l:] l, ctime = self.__unpackint(attrdata) attrdata = attrdata[l:] l, mtime = self.__unpackint(attrdata) attrdata = attrdata[l:] l, expire = self.__unpackint(attrdata) attrdata = attrdata[l:] l, etime = self.__unpackint(attrdata) attrdata = attrdata[l:] if entrytype == b"general": l, username = self.__unpackstr(attrdata) attrdata = attrdata[l:] l, password = self.__unpackstr(attrdata) attrdata = attrdata[l:] l, hostname = self.__unpackstr(attrdata) attrdata = attrdata[l:] else: username = password = hostname = b"" # nosec # create entry if entrytype == b"general": e = entry.GenericEntry() e.name = self.__normstr(name) e.description = self.__normstr(desc) e.updated = mtime e[entry.HostnameField] = self.__normstr(hostname) e[entry.UsernameField] = self.__normstr(username) e[entry.PasswordField] = self.__normstr(password) elif entrytype == b"folder": e = entry.FolderEntry() e.name = self.__normstr(name) e.description = self.__normstr(desc) e.updated = mtime else: continue # add entry to entrystore if parentid in foldermap: parent = foldermap[parentid] else: parent = None iter = entrystore.add_entry(e, parent) if type(e) == entry.FolderEntry: foldermap[id] = iter return entrystore revelation-revelation-0.5.5/src/lib/datahandler/keepassxc.py000066400000000000000000000070141423125252400242050ustar00rootroot00000000000000# # Revelation # Module for importing data from KeepassXC CSV export file # # Copyright (c) 2020 Mikel Olasagasti Uranga # Copyright (c) 2006 Devan Goodwin # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # import csv import time from revelation import data, entry from . import base class KeepassXCCSV(base.DataHandler): """ Data handler for CSV files generated by KeepassXC. CSV format is defined in KeepassXC's CsvExporter.cpp https://github.com/keepassxreboot/keepassxc/blob/develop/src/format/CsvExporter.cpp CSV field description: Type: Ignored Field 1: Group Field 2: Title Field 3: Username Field 4: Password Field 5: URL Field 6: Notes # since KeepassXC-2.6.2 Field 7: TOTP Field 8: Icon Field 9: Last Modified Field 10: Created """ name = "KeepassXC CSV" importer = True exporter = False encryption = False def import_data(self, input, password): " Import data from a file into the entry store" entrystore = data.EntryStore() # Maintain a hash of folder names to folder entries so we # can use each category encountered to create a new folder # by that name, or use an existing one if we've already # created it: folders = {} for line in input.splitlines()[1:]: f_csv = csv.reader([line.decode()]) for row in f_csv: # Raise FormatError if we don't have all 9 fields # KeepasXC 2.5 to 2.6.1 has 6 fields # KeepasXC 2.6.2 has 10 fields if len(row) != 6 and len(row) != 10: raise base.FormatError # If URL is present create WebEntry if row[4]: new_entry = entry.WebEntry() new_entry[entry.URLField] = row[4] else: new_entry = entry.GenericEntry() new_entry.name = row[1] new_entry[entry.UsernameField] = row[2] new_entry[entry.PasswordField] = row[3] new_entry.notes = row[5] # TODO As Last modified and creationtime are from newer # keepassXC releases, set to current time for now new_entry.updated = time.time() # Create and/or add to folder # TODO split folder name and correctly group them if row[0] in folders: parent = folders[row[0]] else: folder = entry.FolderEntry() folder.name = row[0] parent = entrystore.add_entry(folder) folders[row[0]] = parent # Add the entry entrystore.add_entry(new_entry, parent) return entrystore revelation-revelation-0.5.5/src/lib/datahandler/netrc.py000066400000000000000000000101061423125252400233260ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for handling .netrc files # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import data, entry from io import StringIO import shlex import time class NetRC(base.DataHandler): "Data handler for .netrc data" name = "netrc" importer = True exporter = True encryption = False def export_data(self, entrystore, password = None): "Converts data from an entrystore to netrc data" netrc = "" iter = entrystore.iter_nth_child(None, 0) while iter is not None: e = entrystore.get_entry(iter) try: if "" in (e[entry.HostnameField], e[entry.UsernameField], e[entry.PasswordField]): raise ValueError if e.name != "": netrc += "# %s\n" % e.name if e.description != "": netrc += "# %s\n" % e.description netrc += "machine %s\n" % e[entry.HostnameField] netrc += " login %s\n" % e[entry.UsernameField] netrc += " password %s\n" % e[entry.PasswordField] netrc += "\n" except (entry.EntryFieldError, ValueError): pass iter = entrystore.iter_traverse_next(iter) return netrc def import_data(self, netrc, password = None): "Imports data from a netrc stream to an entrystore" entrystore = data.EntryStore() # set up a lexical parser datafp = StringIO(netrc) lexer = shlex.shlex(datafp) lexer.wordchars += r"!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~" while True: # look for a machine, default or macdef top-level keyword tt = lexer.get_token() if not tt: break elif tt == "machine": name = lexer.get_token() elif tt == "default": name = "default" # skip macdef entries elif tt == "macdef": lexer.whitespace = ' \t' while True: line = lexer.instream.readline() if not line or line == '\012': lexer.whitespace = ' \t\r\n' break continue else: raise base.FormatError # we're looking at an entry, so fetch data e = entry.GenericEntry() e.name = name e.updated = time.time() if name != "default": e[entry.HostnameField] = name while True: tt = lexer.get_token() # if we find a new entry, break out of current field-collecting loop if tt == "" or tt == "machine" or tt == "default" or tt == "macdef": entrystore.add_entry(e) lexer.push_token(tt) break elif tt == "login" or tt == "user": e[entry.UsernameField] = lexer.get_token() elif tt == "account": lexer.get_token() elif tt == "password": e[entry.PasswordField] = lexer.get_token() else: raise base.FormatError datafp.close() return entrystore revelation-revelation-0.5.5/src/lib/datahandler/pwsafe.py000066400000000000000000000453741423125252400235170ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for handling PasswordSafe data # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import data, entry import locale import re import struct from Cryptodome.Cipher import Blowfish import Cryptodome.Random as Random FIELDTYPE_NAME = 0x00 FIELDTYPE_UUID = 0x01 FIELDTYPE_GROUP = 0x02 FIELDTYPE_TITLE = 0x03 FIELDTYPE_USER = 0x04 FIELDTYPE_NOTES = 0x05 FIELDTYPE_PASSWORD = 0x06 FIELDTYPE_END = 0xff # We need our own SHA1-implementation, because Password Safe does # non-standard things we need to replicate. This implementation is # written by J. Hallen and L. Creighton for the Pypy project, with # slight modifications by Erik Grinaker. class SHA: K = [ 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 ] def __init__(self, input = None): self.count = [0, 0] self.init() if input != None: self.update(input) def __bytelist2longBigEndian(self, list): imax = len(list)//4 hl = [0] * imax j = 0 i = 0 while i < imax: b0 = list[j] << 24 b1 = list[j+1] << 16 b2 = list[j+2] << 8 b3 = list[j+3] hl[i] = b0 | b1 | b2 | b3 i = i+1 j = j+4 return hl def __long2bytesBigEndian(self, n, blocksize=0): s = b'' pack = struct.pack while n > 0: s = pack('>I', n & 0xffffffff) + s n = n >> 32 for i in range(len(s)): if s[i] != b'\000': break else: s = b'\000' i = 0 s = s[i:] if blocksize > 0 and len(s) % blocksize: s = (blocksize - len(s) % blocksize) * b'\000' + s return s def __rotateLeft(self, x, n): return (x << n) | (x >> (32-n)) def __transform(self, W): for t in range(16, 80): W.append(self.__rotateLeft( W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1) & 0xffffffff) A = self.H0 B = self.H1 C = self.H2 D = self.H3 E = self.H4 for t in range(0, 20): TEMP = self.__rotateLeft(A, 5) + ((B & C) | ((~ B) & D)) + E + W[t] + self.K[0] E = D D = C C = self.__rotateLeft(B, 30) & 0xffffffff B = A A = TEMP & 0xffffffff for t in range(20, 40): TEMP = self.__rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + self.K[1] E = D D = C C = self.__rotateLeft(B, 30) & 0xffffffff B = A A = TEMP & 0xffffffff for t in range(40, 60): TEMP = self.__rotateLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[t] + self.K[2] E = D D = C C = self.__rotateLeft(B, 30) & 0xffffffff B = A A = TEMP & 0xffffffff for t in range(60, 80): TEMP = self.__rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + self.K[3] E = D D = C C = self.__rotateLeft(B, 30) & 0xffffffff B = A A = TEMP & 0xffffffff self.H0 = (self.H0 + A) & 0xffffffff self.H1 = (self.H1 + B) & 0xffffffff self.H2 = (self.H2 + C) & 0xffffffff self.H3 = (self.H3 + D) & 0xffffffff self.H4 = (self.H4 + E) & 0xffffffff def digest(self): H0 = self.H0 H1 = self.H1 H2 = self.H2 H3 = self.H3 H4 = self.H4 input = [] + self.input count = [] + self.count index = (self.count[1] >> 3) & 0x3f if index < 56: padLen = 56 - index else: padLen = 120 - index padding = [128] + [0] * 63 self.update(padding[:padLen]) bits = self.__bytelist2longBigEndian(self.input[:56]) + count self.__transform(bits) digest = self.__long2bytesBigEndian(self.H0, 4) + \ self.__long2bytesBigEndian(self.H1, 4) + \ self.__long2bytesBigEndian(self.H2, 4) + \ self.__long2bytesBigEndian(self.H3, 4) + \ self.__long2bytesBigEndian(self.H4, 4) self.H0 = H0 self.H1 = H1 self.H2 = H2 self.H3 = H3 self.H4 = H4 self.input = input self.count = count return digest def hexdigest(self): return ''.join(['%02x' % ord(c) for c in self.digest()]) def init(self, H0 = 0x67452301, H1 = 0xEFCDAB89, H2 = 0x98BADCFE, H3 = 0x10325476, H4 = 0xC3D2E1F0): self.length = 0 self.input = [] self.H0 = H0 self.H1 = H1 self.H2 = H2 self.H3 = H3 self.H4 = H4 def update(self, inBuf): leninBuf = len(inBuf) index = (self.count[1] >> 3) & 0x3F self.count[1] = self.count[1] + (leninBuf << 3) if self.count[1] < (leninBuf << 3): self.count[0] = self.count[0] + 1 self.count[0] = self.count[0] + (leninBuf >> 29) partLen = 64 - index if leninBuf >= partLen: self.input[index:] = list(inBuf[:partLen]) self.__transform(self.__bytelist2longBigEndian(self.input)) i = partLen while i + 63 < leninBuf: self.__transform(self.__bytelist2longBigEndian(list(inBuf[i:i+64]))) i = i + 64 else: self.input = list(inBuf[i:leninBuf]) else: i = 0 self.input = self.input + list(inBuf) # misc functions common to both datahandlers def decrypt(key, ciphertext, iv = None): "Decrypts data" if len(ciphertext) % 8 != 0: raise base.FormatError cipher = Blowfish.new(key, Blowfish.MODE_ECB) # nosec cbc = iv plaintext = b"" for cipherblock in [ciphertext[i * 8: (i + 1) * 8] for i in range(len(ciphertext) // 8)]: plainblock = decrypt_block(cipher, cipherblock) if cbc != None: plainblock = bytes([plainblock[i] ^ cbc[i] for i in range(len(plainblock))]) cbc = cipherblock plaintext += plainblock return plaintext def decrypt_block(cipher, block): "Decrypts a block with the given cipher" block = bytes((block[3], block[2], block[1], block[0], block[7], block[6], block[5], block[4])) block = cipher.decrypt(block) block = bytes((block[3], block[2], block[1], block[0], block[7], block[6], block[5], block[4])) return block def encrypt(key, plaintext, iv = None): "Encrypts data" if len(plaintext) % 8 != 0: raise base.FormatError cipher = Blowfish.new(key, Blowfish.MODE_ECB) # nosec cbc = iv ciphertext = b"" for plainblock in [plaintext[i * 8: (i + 1) * 8] for i in range(len(plaintext) // 8)]: if cbc != None: plainblock = bytes([plainblock[i] ^ cbc[i] for i in range(len(plainblock))]) cipherblock = encrypt_block(cipher, plainblock) ciphertext += cipherblock if cbc != None: cbc = cipherblock return ciphertext def encrypt_block(cipher, block): "Encrypts a block with the given cipher" block = bytes((block[3], block[2], block[1], block[0], block[7], block[6], block[5], block[4])) block = cipher.encrypt(block) block = bytes((block[3], block[2], block[1], block[0], block[7], block[6], block[5], block[4])) return block def generate_testhash(password, random): "Generates a testhash based on a password and a random string" key = SHA(random + b"\x00\x00" + password.encode()).digest() cipher = Blowfish.new(key, Blowfish.MODE_ECB) # nosec for i in range(1000): random = encrypt_block(cipher, random) h = SHA() h.init(0, 0, 0, 0, 0) h.update(random) h.update(b"\x00\x00") testhash = h.digest() return testhash def create_field(value, type = FIELDTYPE_NAME): "Creates a field" if isinstance(value, str): value = value.encode() field = struct.pack("ii", len(value), type) + value if len(value) == 0 or len(value) % 8 != 0: field += b"\x00" * (8 - len(value) % 8) return field def normalize_field(field): "Normalizes a field value" enc = locale.getpreferredencoding() field = field.replace(b"\x00", b"") field = re.sub(b"\s+", b" ", field) field = field.strip() field = field.decode(enc, "replace") return field def parse_field_header(header): "Parses field data, returns the length and type" if len(header) < 8: raise base.FormatError length, type = struct.unpack("ii", header[:8]) if length == 0 or length % 8 != 0: length += 8 - length % 8 return length, type class PasswordSafe1(base.DataHandler): "Data handler for PasswordSafe 1.x data" name = "Password Safe 1.x" importer = True exporter = True encryption = True def __init__(self): base.DataHandler.__init__(self) def check(self, input): "Checks if the data is valid" if input is None: raise base.FormatError if len(input) < 56: raise base.FormatError if (len(input) - 56) % 8 != 0: raise base.FormatError def export_data(self, entrystore, password): "Exports data from an entrystore" # serialize data enc = locale.getpreferredencoding() db = b"" iter = entrystore.iter_children(None) while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: e = e.convert_generic() edata = b"" edata += create_field(e.name.encode(enc, "replace") + b"\xAD" + e[entry.UsernameField].encode("iso-8859-1")) edata += create_field(e[entry.PasswordField].encode(enc, "replace")) edata += create_field(e.description.encode(enc, "replace")) db += edata iter = entrystore.iter_traverse_next(iter) # encrypt data rand = Random.new() random = rand.read(8) salt = rand.read(20) iv = rand.read(8) testhash = generate_testhash(password, random) ciphertext = encrypt(SHA(password.encode() + salt).digest(), db, iv) return random + testhash + salt + iv + ciphertext def import_data(self, input, password): "Imports data into an entrystore" # read header and test password if password is None: raise base.PasswordError random = input[0:8] testhash = input[8:28] salt = input[28:48] iv = input[48:56] if testhash != generate_testhash(password, random): raise base.PasswordError # load data db = decrypt(SHA(password.encode() + salt).digest(), input[56:], iv) entrystore = data.EntryStore() while len(db) > 0: dbentry = {"name": "", "username": "", "password": "", "note": ""} for f in ("name", "password", "note"): flen, ftype = parse_field_header(db[:8]) value = db[8:8 + flen] if f == "name" and b"\xAD" in value: value, dbentry["username"] = value.split(b"\xAD", 1) dbentry[f] = value db = db[8 + flen:] e = entry.GenericEntry() e.name = normalize_field(dbentry["name"]) e.description = normalize_field(dbentry["note"]) e[entry.UsernameField] = normalize_field(dbentry["username"]) e[entry.PasswordField] = normalize_field(dbentry["password"]) entrystore.add_entry(e) return entrystore class PasswordSafe2(base.DataHandler): "Data handler for PasswordSafe 2.x data" name = "Password Safe 2.x" importer = True exporter = True encryption = True def __init__(self): base.DataHandler.__init__(self) def __get_group(self, entrystore, iter): "Returns the group path for an iter" path = [] iter = entrystore.iter_parent(iter) while iter is not None: path.append(entrystore.get_entry(iter).name) iter = entrystore.iter_parent(iter) path.reverse() return ".".join(path) def __setup_group(self, entrystore, groupmap, group): "Sets up a group folder, or returns an existing one" if group in (None, ""): return None if group in groupmap: return groupmap[group] if "." in group: parent, groupname = group.rsplit(".", 1) parentiter = self.__setup_group(entrystore, groupmap, parent) else: groupname = group parentiter = None e = entry.FolderEntry() e.name = groupname iter = entrystore.add_entry(e, parentiter) groupmap[group] = iter return iter def check(self, input): "Checks if the data is valid" if input is None: raise base.FormatError if len(input) < 56: raise base.FormatError if (len(input) - 56) % 8 != 0: raise base.FormatError def export_data(self, entrystore, password): "Exports data from an entrystore" # set up magic entry at start of database db = b"" db += b"\x48\x00\x00\x00\x00\x00\x00\x00" db += b" !!!Version 2 File Format!!! Please upgrade to PasswordSafe 2.0 or later" db += b"\x03\x00\x00\x00\x06\x00\x00\x00" db += b"2.0\x00\x00\x00\x00\x00" db += b"\x00\x00\x00\x00\x06\x00\x00\x00" db += b"\x00\x00\x00\x00\x00\x00\x00\x00" # serialize data uuids = [] iter = entrystore.iter_children(None) enc = locale.getpreferredencoding() rand = Random.new() while iter is not None: e = entrystore.get_entry(iter) if type(e) != entry.FolderEntry: e = e.convert_generic() uuid = rand.read(16) while uuid in uuids: uuid = rand.read(16) edata = b"" edata += create_field(uuid, FIELDTYPE_UUID) edata += create_field(self.__get_group(entrystore, iter), FIELDTYPE_GROUP) edata += create_field(e.name.encode(enc, "replace"), FIELDTYPE_TITLE) s = e[entry.UsernameField] if s is None: s = "" edata += create_field(s.encode(enc, "replace"), FIELDTYPE_USER) edata += create_field(e[entry.PasswordField].encode(enc, "replace"), FIELDTYPE_PASSWORD) edata += create_field(e.description.encode(enc, "replace"), FIELDTYPE_NOTES) edata += create_field("", FIELDTYPE_END) db += edata iter = entrystore.iter_traverse_next(iter) # encrypt data rand = Random.new() random = rand.read(8) salt = rand.read(20) iv = rand.read(8) testhash = generate_testhash(password, random) ciphertext = encrypt(SHA(password.encode() + salt).digest(), db, iv) return random + testhash + salt + iv + ciphertext def import_data(self, input, password): "Imports data into an entrystore" # read header and test password if password is None: raise base.PasswordError random = input[0:8] testhash = input[8:28] salt = input[28:48] iv = input[48:56] if testhash != generate_testhash(password, random): raise base.PasswordError # load data db = decrypt(SHA(password.encode() + salt).digest(), input[56:], iv) entrystore = data.EntryStore() # read magic entry for f in "magic", "version", "prefs": flen, ftype = parse_field_header(db) value = db[8:8 + flen] if f == "magic" and value != b" !!!Version 2 File Format!!! Please upgrade to PasswordSafe 2.0 or later": raise base.FormatError db = db[8 + flen:] # import entries e = entry.GenericEntry() group = None groupmap = {} while len(db) > 0: flen, ftype = parse_field_header(db) value = normalize_field(db[8:8 + flen]) if ftype == FIELDTYPE_NAME: if b"\xAD" not in value: e.name = value else: n, u = value.split(b"\xAD", 1) e.name = normalize_field(n) e[entry.UsernameField] = normalize_field(u) elif ftype == FIELDTYPE_TITLE: e.name = value elif ftype == FIELDTYPE_USER: e[entry.UsernameField] = value elif ftype == FIELDTYPE_PASSWORD: e[entry.PasswordField] = value elif ftype == FIELDTYPE_NOTES: e.description = value elif ftype == FIELDTYPE_UUID: pass elif ftype == FIELDTYPE_GROUP: group = value elif ftype == FIELDTYPE_END: if group not in (None, ""): parent = self.__setup_group(entrystore, groupmap, group) else: parent = None entrystore.add_entry(e, parent) e = entry.GenericEntry() group = None else: pass db = db[8 + flen:] return entrystore class MyPasswordSafe(PasswordSafe2): "Data handler for MyPasswordSafe data" name = "MyPasswordSafe" importer = True exporter = True encryption = True class MyPasswordSafeOld(PasswordSafe1): "Data handler for old MyPasswordSafe data" name = "MyPasswordSafe (old format)" importer = True exporter = True encryption = True class PasswordGorilla(PasswordSafe2): "Data handler for Password Gorilla data" name = "Password Gorilla" importer = True exporter = True encryption = True revelation-revelation-0.5.5/src/lib/datahandler/rvl.py000066400000000000000000000432431423125252400230260ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for handling Revelation data # # # Copyright (c) 2003-2006 Erik Grinaker # Copyright (c) 2012 Mikel Olasagasti # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import config, data, entry, util from revelation.bundle import luks from Cryptodome.Protocol.KDF import PBKDF2 from Cryptodome.Hash import SHA1 from Cryptodome.Random import get_random_bytes import defusedxml.minidom import os import re import struct import zlib from io import BytesIO from xml.parsers.expat import ExpatError from Cryptodome.Cipher import AES import hashlib class RevelationXML(base.DataHandler): "Handler for Revelation XML data" name = "XML" importer = True exporter = True encryption = False def __init__(self): base.DataHandler.__init__(self) def __lookup_entry(self, typename): "Looks up an entry type based on an identifier" for entrytype in entry.ENTRYLIST: if entrytype().id == typename: return entrytype else: raise entry.EntryTypeError def __lookup_field(self, fieldname): "Looks up an entry field based on an identifier" for fieldtype in entry.FIELDLIST: if fieldtype.id == fieldname: return fieldtype else: raise entry.EntryFieldError def __xml_import_node(self, entrystore, node, parent = None): "Imports a node into an entrystore" try: # check the node if node.nodeType == node.TEXT_NODE: return if node.nodeType != node.ELEMENT_NODE or node.nodeName != "entry": raise base.FormatError # create an entry, iter needed for children e = self.__lookup_entry(node.attributes["type"].value)() iter = entrystore.add_entry(e, parent) # handle child nodes for child in node.childNodes: if child.nodeType != child.ELEMENT_NODE: continue elif child.nodeName == "name": e.name = util.dom_text(child) elif child.nodeName == "notes": e.notes = util.dom_text(child) elif child.nodeName == "description": e.description = util.dom_text(child) elif child.nodeName == "updated": e.updated = int(util.dom_text(child)) elif child.nodeName == "field": e[self.__lookup_field(child.attributes["id"].nodeValue)] = util.dom_text(child) elif child.nodeName == "entry": if type(e) != entry.FolderEntry: raise base.DataError self.__xml_import_node(entrystore, child, iter) else: raise base.FormatError # update entry with actual data entrystore.update_entry(iter, e) except (entry.EntryTypeError, entry.EntryFieldError): raise base.DataError except KeyError: raise base.FormatError except ValueError: raise base.DataError def check(self, input): "Checks if the data is valid" if input is None: raise base.FormatError if isinstance(input, str): input = input.encode() match = re.match(b""" \s* # whitespace at beginning <\?xml(?:.*)\?> # xml header \s* # whitespace after xml header ]+ # any non-closing character dataversion="(\d+)" # dataversion [^>]* # any non-closing character > # close revelationdata tag """, input, re.VERBOSE) if match is None: raise base.FormatError if int(match.group(1)) != 1: raise base.VersionError def detect(self, input): "Checks if this handler can guarantee to handle some data" try: self.check(input) return True except (base.FormatError, base.VersionError): return False def export_data(self, entrystore, password = None, parent = None, level = 0): "Serializes data into an XML stream" xml = "" tabs = "\t" * (level + 1) for i in range(entrystore.iter_n_children(parent)): iter = entrystore.iter_nth_child(parent, i) e = entrystore.get_entry(iter) xml += "\n" xml += tabs + "\n" % e.id xml += tabs + " %s\n" % util.escape_markup(e.name) xml += tabs + " %s\n" % util.escape_markup(e.description) xml += tabs + " %d\n" % e.updated xml += tabs + " %s\n" % util.escape_markup(e.notes) for field in e.fields: xml += tabs + " %s\n" % (field.id, util.escape_markup(field.value)) xml += RevelationXML.export_data(self, entrystore, password, iter, level + 1) xml += tabs + "\n" if level == 0: header = "\n" header += "\n" % config.VERSION footer = "\n" xml = header + xml + footer return xml def import_data(self, input, password = None): "Imports data from a data stream to an entrystore" RevelationXML.check(self, input) try: dom = defusedxml.minidom.parseString(input.strip()) except ExpatError: raise base.FormatError if dom.documentElement.nodeName != "revelationdata": raise base.FormatError if "dataversion" not in dom.documentElement.attributes: raise base.FormatError entrystore = data.EntryStore() for node in dom.documentElement.childNodes: self.__xml_import_node(entrystore, node) return entrystore class Revelation(RevelationXML): "Handler for Revelation data" name = "Revelation" importer = True exporter = True encryption = True def __init__(self): RevelationXML.__init__(self) def __generate_header(self): "Generates a header" header = "rvl\x00" # magic string header += "\x01" # data version header += "\x00" # separator header += "\x00\x04\x06" # application version TODO header += "\x00\x00\x00" # separator return header def __parse_header(self, header): "Parses a data header, returns the data version" if header is None: raise base.FormatError match = re.match(b""" ^ # start of header rvl\x00 # magic string (.) # data version \x00 # separator (.{3}) # app version \x00\x00\x00 # separator """, header, re.VERBOSE) if match is None: raise base.FormatError return ord(match.group(1)) def check(self, input): "Checks if the data is valid" if input is None: raise base.FormatError if len(input) < (12 + 16): raise base.FormatError dataversion = self.__parse_header(input[:12]) if dataversion != 1: raise base.VersionError def detect(self, input): "Checks if the handler can guarantee to use the data" try: self.check(input) return True except (base.FormatError, base.VersionError): return False def export_data(self, entrystore, password): "Exports data from an entrystore" # check and pad password if password is None: raise base.PasswordError password = util.pad_right(password[:32], 32, "\0") # generate XML data = RevelationXML.export_data(self, entrystore) # compress data, and right-pad with the repeated ascii # value of the pad length data = zlib.compress(data.encode()) padlen = 16 - (len(data) % 16) if padlen == 0: padlen = 16 data += bytearray((padlen,)) * padlen # generate an initial vector for the CBC encryption iv = os.urandom(16) data = AES.new(password.encode("utf8"), AES.MODE_CBC, iv).encrypt(data) # encrypt the iv, and prepend it to the data with a header data = self.__generate_header().encode("utf8") + AES.new(password.encode("utf8"), AES.MODE_ECB).encrypt(iv) + data return data def import_data(self, input, password): "Imports data into an entrystore" # check and pad password if password is None: raise base.PasswordError password = util.pad_right(password[:32], 32, "\0") # check the data self.check(input) dataversion = self.__parse_header(input[:12]) # handle only version 1 data files if dataversion != 1: raise base.VersionError cipher = AES.new(password.encode("utf8"), AES.MODE_ECB) iv = cipher.decrypt(input[12:28]) # decrypt the data input = input[28:] if len(input) % 16 != 0: raise base.FormatError cipher = AES.new(password.encode("utf8"), AES.MODE_CBC, iv) input = cipher.decrypt(input) # decompress data padlen = input[-1] for i in input[-padlen:]: if i != padlen: raise base.PasswordError input = zlib.decompress(input[0:-padlen]).decode() # check and import data if input.strip()[:5] != " 4: data += bytes([128] + [0] * (padlen - 5)) data += struct.pack(" # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # import csv import time from . import base from revelation import data, entry class SplashIDCSV(base.DataHandler): """ Data handler for CSV files generated by SplashID. While SplashID CSV files were used as the basis for this parser, by arranging data in the format similar to what SplashID generates (i.e. use a spreadsheet and export a CSV with the proper format) one should be able to import any CSV file. SplashID's CSV data looks like the following: Type,Field 1,Field 2,Field 3,Field 4,Field 5,Field 6,Notes,Category The mapping to a Revelation generic entry takes place as follows: Type: Ignored Field 1: Name Field 2: Username Field 3: Password Field 4: Hostname Field 5: Added to Description Field 6: Added to Description Notes: Added to Description Category: Folder """ name = "SplashID CSV" importer = True exporter = False encryption = False def import_data(self, input, password): " Import data from a file into the entry store" # Replace any vertical tabs with spaces, SplashID seems to use # these to seperate lines within a Notes field: if input.count(b'\x0b'): input = input.replace(b'\x0b', b' ') entrystore = data.EntryStore() # Maintain a hash of folder names to folder entries so we # can use each category encountered to create a new folder # by that name, or use an existing one if we've already # created it: folders = {} for line in input.splitlines(): for row in csv.reader([line.decode()]): # Raise FormatError if we don't have all 9 fields if len(row) != 9: raise base.FormatError # Import the entry e = entry.GenericEntry() e.name = row[1] e.description = " / ".join([desc.strip() for desc in row[5:8] if desc.strip() != ""]) e.updated = time.time() e[entry.UsernameField] = row[2] e[entry.PasswordField] = row[3] e[entry.HostnameField] = row[4] # Create and/or add to folder based on category: if row[8] in folders: parent = folders[category] else: folder = entry.FolderEntry() folder.name = category parent = entrystore.add_entry(new_folder) folders[row[8]] = parent # Add the entry entrystore.add_entry(e, parent) return entrystore revelation-revelation-0.5.5/src/lib/datahandler/text.py000066400000000000000000000045051423125252400232050ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for handling plain text files # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import entry import time class PlainText(base.DataHandler): "Data handler for plain text files" name = "Plain text" importer = False exporter = True encryption = False def export_data(self, entrystore, password = None): "Exports data to a plain text file" text = "" # fetch and sort entries iter = entrystore.iter_nth_child(None, 0) while iter is not None: e = entrystore.get_entry(iter) if type(e) == entry.FolderEntry: text += "%s [Folder]\n" % e.name text += "%s\n" % e.description text += "%s\n" % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(e.updated)) else: text += "%s [%s]\n" % (e.name, e.typename) text += e.description != "" and "%s\n" % e.description or "" text += "%s\n" % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(e.updated)) fields = [field for field in e.fields if field.value != ""] if len(fields) > 0: text += "\n" maxlen = max([len(field.name) for field in fields]) for field in fields: text += "- " + field.name + ": " + (" " * (maxlen - len(field.name))) + field.value + "\n" text += "\n\n" iter = entrystore.iter_traverse_next(iter) return text revelation-revelation-0.5.5/src/lib/datahandler/xhtml.py000066400000000000000000000343111423125252400233530ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for exporting to XHTML files # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import base from revelation import config, entry import gettext import time _ = gettext.gettext IMAGEPATH = "https://revelation.olasagasti.info/static" class XHTML(base.DataHandler): "Data handler for XHTML export" name = "XHTML / CSS" importer = False exporter = True encryption = False def __init__(self): base.DataHandler.__init__(self) def __generate_css(self): "Generates a CSS for the XHTML document" css = """ /* containers */ body { margin: 20px 10px; padding: 0px; font-family: sans-serif; font-size: 10pt; line-height: 1.3; color: #333333; background-color: #ffffff; } div { margin: 0px; padding: 0px; } p { margin: 0px 0px 5px 0px; padding: 0px; } table { font-family: sans-serif; font-size: 10pt; line-height: 1.3; margin: 0px; border-collapse: collapse; color: #333333; background-color: transparent; } td { text-align: left; vertical-align: top; } th { text-align: left; vertical-align: top; font-weight: bold; color: #000000; } /* headings */ h1, h2, h3 { margin: 0px; padding: 0px; line-height: 1; font-weight: bold; color: #000000; } h1 { margin-bottom: 20px; font-size: 16pt; } h2 { margin-bottom: 5px; font-size: 14pt; } h3 { font-size: 10pt; } /* content */ a { color: #3333cc; text-decoration: none; } a:hover { text-decoration: underline; } img { margin: 0px; padding: 0px; border: none; } strong { color: #000000; } /* the content area */ #content { margin-right: 220px; } /* the sidebar */ #sidebar { width: 200px; float: right; } #sidebar h2 { margin: 20px 0px 10px 0px; padding: 0px 0px 5px 0px; border-bottom: 1px dashed #3366cc; text-transform: lowercase; } #sidebar h2 img.icon { width: 24px; height: 24px; margin-right: 5px; vertical-align: middle; } #sidebar h3 { margin-bottom: 2px; text-transform: lowercase; } #sidebar p { margin: 0px 5px 10px 15px; } #sidebar ul { list-style: none; padding: 0px; margin: 0px 0px 10px 0px; } #sidebar ul ul { margin: 0px 0px 0px 15px; } #sidebar ul.accountlist { margin-left: 15px; } /* the entrylist */ #entrylist { width: 99%; padding: 0px; margin: 0px; } /* the footer */ #footer { margin: 50px 220px 10px 0px; font-size: 8pt; text-align: center; color: #aaaaaa; } #footer a { color: #8888ee; } /* folders */ li.folder { width: 100%; list-style-type: none; } li.folder .folder-data { margin: 0px 0px 10px 0px; padding: 2px 5px 3px 5px; border: 1px solid #3366cc; background-color: #e5ecf9; } li.folder .folder-data h2 { margin: 0px; } li.folder .folder-data p { margin: 0px; } /* accounts */ li.account { list-style-type: none; width: 350px; margin: 0px 0px 10px 0px; border: 1px solid #3366cc; } li.account .heading { padding: 2px 5px; background-color: #e5ecf9; border-bottom: 1px solid #3366cc; } li.account .heading h2 { margin: 0px 0px 1px 0px; } li.account .heading img { float: right; width: 24px; height: 24px; } li.account .heading .description { margin: 0px; } li.account .heading .type { color: #000000; font-weight: bold; } li.account .data { padding: 5px; } li.account .data .fields { margin: 0px 0px 3px 0px; } li.account .data .fields td { padding: 1px 0px; } li.account .data .fields th { padding: 1px 5px 1px 0px; } li.account .updated { font-size: 8pt; text-align: right; margin: 0px; } """ return css def __generate_entry(self, entrystore, iter, depth = 0): "Generates xhtml for an entry" tabs = "\t" * (depth + 2) e = entrystore.get_entry(iter) if e is not None: e.path = self.__get_entryid(entrystore, iter) xhtml = "" if e is None: xhtml += "
\n" xhtml += "
    \n" for i in range(entrystore.iter_n_children(iter)): child = entrystore.iter_nth_child(iter, i) xhtml += self.__generate_entry(entrystore, child, depth) xhtml += "
\n" xhtml += "
\n" elif type(e) == entry.FolderEntry: xhtml += tabs + "
  • \n" % e.path xhtml += tabs + "
    \n" xhtml += tabs + "

    %s

    \n" % e.name if e.description != "": xhtml += tabs + "

    %s

    \n" % e.description xhtml += tabs + "
    \n" xhtml += tabs + "\n" xhtml += tabs + "
      \n" for i in range(entrystore.iter_n_children(iter)): child = entrystore.iter_nth_child(iter, i) xhtml += self.__generate_entry(entrystore, child, depth + 2) xhtml += tabs + "
    \n" xhtml += tabs + "
  • \n" xhtml += tabs + "\n" else: xhtml += tabs + "
  • \n" % e.path xhtml += tabs + "
    \n" xhtml += tabs + " \"%s\"\n" % (IMAGEPATH, e.id, e.typename) xhtml += tabs + "

    %s

    \n" % e.name xhtml += tabs + "

    %s%s

    \n" % (e.typename + (e.description != "" and "; " or ""), e.description) xhtml += tabs + "
    \n" xhtml += tabs + "\n" xhtml += tabs + "
    \n" fields = [] for field in e.fields: if field.value != "": fields.append(field) if len(fields) > 0: xhtml += tabs + " \n" for field in fields: xhtml += tabs + " \n" xhtml += tabs + " \n" xhtml += tabs + " \n" xhtml += tabs + " \n" xhtml += tabs + "
    " + field.name + ":" + field.value + "
    \n" xhtml += tabs + "

    Updated " + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(e.updated)) + "

    \n" xhtml += tabs + "
    \n" xhtml += tabs + "
  • \n" xhtml += tabs + "\n" return xhtml def __generate_footer(self): "Generates an xhtml footer" xhtml = "" xhtml += "
    \n" xhtml += " Generated by %s %s" % (config.URL, config.APPNAME, config.VERSION) xhtml += "
    \n" xhtml += "\n" xhtml += "\n" return xhtml def __generate_header(self): "Generates an xhtml header" xhtml = "" xhtml += "\n" xhtml += "\n" xhtml += "\n" xhtml += " Revelation account list\n" xhtml += " \n" xhtml += "\n" xhtml += " \n" xhtml += "\n" xhtml += "\n" xhtml += "\n" xhtml += "

    " + _('Revelation account list') + "

    \n" xhtml += "\n" return xhtml def __generate_sidebar(self, entrystore): "Generates a sidebar" xhtml = "" xhtml += "
    \n" xhtml += self.__generate_sidebar_fileinfo() xhtml += self.__generate_sidebar_foldertree(entrystore) xhtml += self.__generate_sidebar_accountlist(entrystore) xhtml += "
    \n" return xhtml def __generate_sidebar_accountlist(self, entrystore): "Generates an account list" # find the entries entries = {} iter = entrystore.iter_nth_child(None, 0) while iter is not None: e = entrystore.get_entry(iter) e.path = self.__get_entryid(entrystore, iter) if type(e) != entry.FolderEntry: if type(e) not in entries: entries[type(e)] = [] entries[type(e)].append(e) iter = entrystore.iter_traverse_next(iter) # generate the xhtml xhtml = "" xhtml += ("

    \"Account" + _('Account list') + "

    \n") % IMAGEPATH xhtml += "\n" for entrytype in entry.ENTRYLIST: if entrytype not in entries: continue xhtml += "

    %s:

    \n" % entrytype().typename xhtml += "\n" xhtml += "
      \n" entrylist = entries[entrytype] for e in entrylist: xhtml += "
    • %s
    • \n" % (str(e.path), e.name) xhtml += "
    \n" xhtml += "\n" return xhtml def __generate_sidebar_fileinfo(self): "Generates file info for the sidebar" xhtml = "" xhtml += "

    \"FileFile info

    \n" % IMAGEPATH xhtml += "\n" xhtml += "

    " + _('Created:') + "

    \n" xhtml += "

    %s

    \n" % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) xhtml += "\n" xhtml += "

    " + _('Revelation version:') + "

    \n" xhtml += "

    %s

    \n" % config.VERSION xhtml += "\n" return xhtml def __generate_sidebar_foldertree(self, entrystore, parent = None, depth = 0): "Generates a folder tree for the sidebar" tabs = "\t" * ((depth * 2) - 2) xhtml = "" if parent is None: xhtml += "

    \"FolderFolder tree

    \n" % IMAGEPATH xhtml += "\n" # fetch folder list folders = [] for i in range(entrystore.iter_n_children(parent)): iter = entrystore.iter_nth_child(parent, i) e = entrystore.get_entry(iter) e.path = self.__get_entryid(entrystore, iter) e.iter = iter if type(e) == entry.FolderEntry: folders.append(e) # generate xhtml if len(folders) > 0: xhtml += tabs + "
      \n" for e in folders: childxhtml = self.__generate_sidebar_foldertree(entrystore, e.iter, depth + 1) if childxhtml != "": xhtml += tabs + "
    • \n" xhtml += tabs + " %s\n" % (str(e.path), e.name) xhtml += childxhtml xhtml += tabs + "
    • \n" else: xhtml += tabs + "
    • %s
    • \n" % (str(e.path), e.name) xhtml += tabs + "
    \n" return xhtml def __get_entryid(self, entrystore, iter): "Returns an entry id for an iter" path = "entry-" for i in entrystore.get_path(iter): path += str(i) + "-" path = path[:-1] return path def export_data(self, entrystore, password = None): "Exports data from an entrystore into a XHTML document" xhtml = "" xhtml += self.__generate_header() xhtml += self.__generate_sidebar(entrystore) xhtml += self.__generate_entry(entrystore, None) xhtml += self.__generate_footer() return xhtml revelation-revelation-0.5.5/src/lib/dialog.py000066400000000000000000001113311423125252400212050ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module with dialogs # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import config, datahandler, entry, io, ui, util import gettext import urllib.parse import gi gi.require_version('Gtk', '3.0') from gi.repository import GObject, Gtk, Gio, Gdk # noqa: E402 _ = gettext.gettext EVENT_FILTER = None UNIQUE_DIALOGS = {} Gtk.rc_parse_string(""" style "hig" { GtkDialog::content-area-border = 0 GtkDialog::action-area-border = 0 } class "GtkDialog" style "hig" """) # EXCEPTIONS # class CancelError(Exception): "Exception for dialog cancellations" pass # BASE DIALOGS # class Dialog(Gtk.Dialog): "Base class for dialogs" def __init__(self, parent, title): Gtk.Dialog.__init__(self, title=title) self.set_border_width(12) self.vbox.set_spacing(12) self.set_resizable(False) self.set_modal(True) self.set_transient_for(parent) self.connect("key-press-event", self.__cb_keypress) def __cb_keypress(self, widget, data): "Callback for handling key presses" # close the dialog on escape if data.keyval == Gdk.KEY_Escape: self.response(Gtk.ResponseType.CLOSE) return True def run(self): "Runs the dialog" self.show_all() while True: response = Gtk.Dialog.run(self) if response == Gtk.ResponseType.NONE: continue return response class Popup(Gtk.Window): "Base class for popup (frameless) dialogs" def __init__(self, widget = None): Gtk.Window.__init__(self) self.set_decorated(False) self.border = Gtk.Frame() self.border.set_shadow_type(Gtk.ShadowType.OUT) Gtk.Window.add(self, self.border) if widget != None: self.add(widget) self.connect("key-press-event", self.__cb_keypress) def __cb_keypress(self, widget, data): "Callback for key presses" if data.keyval == Gdk.KEY_Escape: self.close() def add(self, widget): "Adds a widget to the window" self.border.add(widget) def close(self): "Closes the dialog" self.hide() self.emit("closed") self.destroy() def realize(self): "Realizes the popup and displays children" Gtk.Window.realize(self) for child in self.get_children(): child.show_all() def show(self, x = None, y = None): "Show the dialog" if x != None and y != None: self.move(x, y) self.show_all() GObject.signal_new("closed", Popup, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, ()) class Utility(Dialog): "A utility dialog" def __init__(self, parent, title): Dialog.__init__(self, parent, title) self.set_border_width(12) self.vbox.set_spacing(18) self.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) def add_section(self, title, description = None): "Adds an input section to the dialog" section = ui.InputSection(title, description, self.sizegroup) self.vbox.pack_start(section, True, True, 0) return section class Message(Dialog): "A message dialog" def __init__(self, parent, title, text, stockimage): Dialog.__init__(self, parent, "") # hbox with image and contents hbox = ui.HBox() hbox.set_spacing(12) self.vbox.pack_start(hbox, True, True, 0) self.vbox.set_spacing(24) # set up image if stockimage != None: image = ui.Image(stockimage, Gtk.IconSize.DIALOG) image.set_valign(Gtk.Align.START) hbox.pack_start(image, False, False, 0) # set up message self.contents = ui.VBox() self.contents.set_spacing(10) hbox.pack_start(self.contents, True, True, 0) label = ui.Label("%s\n\n%s" % (util.escape_markup(title), text)) label.set_justify(Gtk.Justification.FILL) label.set_selectable(True) label.set_max_width_chars(45) self.contents.pack_start(label, True, True, 0) def run(self): "Displays the dialog" self.show_all() response = Dialog.run(self) self.destroy() return response class Error(Message): "Displays an error message" def __init__(self, parent, title, text): Message.__init__(self, parent, title, text, "dialog-error") self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) class Info(Message): "Displays an info message" def __init__(self, parent, title, text): Message.__init__(self, parent, title, text, "dialog-information") self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) class Question(Message): "Displays a question" def __init__(self, parent, title, text): Message.__init__(self, parent, title, text, "dialog-question") self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) class Warning(Message): "Displays a warning message" def __init__(self, parent, title, text): Message.__init__(self, parent, title, text, "dialog-warning") # QUESTION DIALOGS # class FileChanged(Warning): "Notifies about changed file" def __init__(self, parent, filename): Warning.__init__( self, parent, _('File has changed'), _('The current file \'%s\' has changed. Do you want to reload it?') % filename ) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(ui.STOCK_RELOAD, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.OK) def run(self): "Displays the dialog" if Warning.run(self) == Gtk.ResponseType.OK: return True else: raise CancelError class FileChanges(Warning): "Asks to save changes before proceeding" def __init__(self, parent, title, text): Warning.__init__(self, parent, title, text) self.add_button(Gtk.STOCK_DISCARD, Gtk.ResponseType.ACCEPT) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.OK) def run(self): "Displays the dialog" response = Warning.run(self) if response == Gtk.ResponseType.OK: return True elif response == Gtk.ResponseType.ACCEPT: return False elif response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.CLOSE): raise CancelError class FileChangesNew(FileChanges): "Asks the user to save changes when creating a new file" def __init__(self, parent): FileChanges.__init__( self, parent, _('Save changes to current file?'), _('You have made changes which have not been saved. If you create a new file without saving then these changes will be lost.') ) class FileChangesOpen(FileChanges): "Asks the user to save changes when opening a different file" def __init__(self, parent): FileChanges.__init__( self, parent, _('Save changes before opening?'), _('You have made changes which have not been saved. If you open a different file without saving then these changes will be lost.') ) class FileChangesQuit(FileChanges): "Asks the user to save changes when quitting" def __init__(self, parent): FileChanges.__init__( self, parent, _('Save changes before quitting?'), _('You have made changes which have not been saved. If you quit without saving, then these changes will be lost.') ) class FileChangesClose(FileChanges): "Asks the user to save changes when closing" def __init__(self, parent): FileChanges.__init__( self, parent, _('Save changes before closing?'), _('You have made changes which have not been saved. If you close without saving, then these changes will be lost.') ) class FileReplace(Warning): "Asks for confirmation when replacing a file" def __init__(self, parent, file): Warning.__init__( self, parent, _('Replace existing file?'), _('The file \'%s\' already exists - do you wish to replace this file?') % file ) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(ui.STOCK_REPLACE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.CANCEL) def run(self): "Displays the dialog" if Warning.run(self) == Gtk.ResponseType.OK: return True else: raise CancelError class FileSaveInsecure(Warning): "Asks for confirmation when exporting to insecure file" def __init__(self, parent): Warning.__init__( self, parent, _('Save to insecure file?'), _('You have chosen to save your passwords to an insecure (unencrypted) file format - if anyone has access to this file, they will be able to see your passwords.'), ) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.CANCEL) def run(self): "Runs the dialog" if Warning.run(self) == Gtk.ResponseType.OK: return True else: raise CancelError # FILE SELECTION DIALOGS # class FileSelector(Gtk.FileChooserNative): "A normal file selector" def __init__(self, parent, title=None, action=Gtk.FileChooserAction.OPEN): Gtk.FileChooserNative.__init__(self, title=title, action=action) self.set_transient_for(parent) self.set_local_only(False) self.inputsection = None def add_widget(self, title, widget): "Adds a widget to the file selection" if self.inputsection is None: self.inputsection = ui.InputSection() self.set_extra_widget(self.inputsection) self.inputsection.append_widget(title, widget) def get_filename(self): "Returns the file URI" uri = self.get_uri() if uri is None: return None else: return io.file_normpath(urllib.parse.unquote(uri)) def run(self): "Displays and runs the file selector, returns the filename" response = Gtk.FileChooserNative.run(self) filename = self.get_filename() self.destroy() if response == Gtk.ResponseType.ACCEPT: return filename else: raise CancelError class ExportFileSelector(FileSelector): "A file selector for exporting files" def __init__(self, parent): FileSelector.__init__( self, parent, _('Select File to Export to'), Gtk.FileChooserAction.SAVE ) # set up filetype dropdown self.dropdown = ui.DropDown() self.add_widget(_('Filetype'), self.dropdown) for handler in datahandler.get_export_handlers(): self.dropdown.append_item(handler.name, None, handler) for index in range(self.dropdown.get_num_items()): if self.dropdown.get_item(index)[2] == datahandler.RevelationXML: self.dropdown.set_active(index) def run(self): "Displays the dialog" self.inputsection.show_all() if Gtk.FileChooserNative.run(self) == Gtk.ResponseType.ACCEPT: filename = self.get_filename() handler = self.dropdown.get_active_item()[2] self.destroy() return filename, handler else: self.destroy() raise CancelError class ImportFileSelector(FileSelector): "A file selector for importing files" def __init__(self, parent): FileSelector.__init__( self, parent, _('Select File to Import'), Gtk.FileChooserAction.OPEN ) # set up filetype dropdown self.dropdown = ui.DropDown() self.add_widget(_('Filetype'), self.dropdown) self.dropdown.append_item(_('Automatically detect')) for handler in datahandler.get_import_handlers(): self.dropdown.append_item(handler.name, None, handler) def run(self): "Displays the dialog" self.inputsection.show_all() if Gtk.FileChooserNative.run(self) == Gtk.ResponseType.ACCEPT: filename = self.get_filename() handler = self.dropdown.get_active_item()[2] self.destroy() return filename, handler else: self.destroy() raise CancelError class OpenFileSelector(FileSelector): "A file selector for opening files" def __init__(self, parent): FileSelector.__init__( self, parent, _('Select File to Open'), Gtk.FileChooserAction.OPEN ) filter = Gtk.FileFilter() filter.set_name(_('Revelation files')) filter.add_mime_type("application/x-revelation") self.add_filter(filter) filter = Gtk.FileFilter() filter.set_name(_('All files')) filter.add_pattern("*") self.add_filter(filter) class SaveFileSelector(FileSelector): "A file selector for saving files" def __init__(self, parent): FileSelector.__init__( self, parent, _('Select File to Save to'), Gtk.FileChooserAction.SAVE ) filter = Gtk.FileFilter() filter.set_name(_('Revelation files')) filter.add_mime_type("application/x-revelation") self.add_filter(filter) filter = Gtk.FileFilter() filter.set_name(_('All files')) filter.add_pattern("*") self.add_filter(filter) self.set_do_overwrite_confirmation(True) self.connect("confirm-overwrite", self.__cb_confirm_overwrite) def __cb_confirm_overwrite(self, widget, data = None): "Handles confirm-overwrite signals" try: FileReplace(self, io.file_normpath(self.get_uri())).run() except CancelError: return Gtk.FileChooserConfirmation.SELECT_AGAIN else: return Gtk.FileChooserConfirmation.ACCEPT_FILENAME # PASSWORD DIALOGS # class Password(Message): "A base dialog for asking for passwords" def __init__(self, parent, title, text, stock = Gtk.STOCK_OK): Message.__init__(self, parent, title, text, "dialog-password") self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(stock, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.OK) self.entries = [] self.sect_passwords = ui.InputSection() self.contents.pack_start(self.sect_passwords, True, True, 0) def add_entry(self, name, entry = None): "Adds a password entry to the dialog" if entry is None: entry = ui.Entry() entry.set_visibility(False) self.sect_passwords.append_widget(name, entry) self.entries.append(entry) return entry def run(self): "Displays the dialog" self.show_all() if len(self.entries) > 0: self.entries[0].grab_focus() return Gtk.Dialog.run(self) class PasswordChange(Password): "A dialog for changing the password" def __init__(self, parent, password = None): Password.__init__( self, parent, _('Enter new password'), _('Enter a new password for the current data file. The file must be saved before the new password is applied.'), ui.STOCK_PASSWORD_CHANGE ) self.password = password if password is not None: self.entry_current = self.add_entry(_('Current password')) self.entry_new = self.add_entry(_('New password'), ui.PasswordEntry()) self.entry_confirm = self.add_entry(_('Confirm password')) self.entry_confirm.autocheck = False def run(self): "Displays the dialog" while True: if Password.run(self) != Gtk.ResponseType.OK: self.destroy() raise CancelError elif self.password is not None and self.entry_current.get_text() != self.password: Error(self, _('Incorrect password'), _('The password you entered as the current file password is incorrect.')).run() elif self.entry_new.get_text() != self.entry_confirm.get_text(): Error(self, _('Passwords don\'t match'), _('The password and password confirmation you entered does not match.')).run() else: password = self.entry_new.get_text() try: util.check_password(password) except ValueError as res: WarnInsecure = Warning( self, _('Use insecure password?'), _('The password you entered is not secure; %s. Are you sure you want to use it?') % str(res).lower() ) WarnInsecure.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) WarnInsecure.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) WarnInsecure.set_default_response(Gtk.ResponseType.CANCEL) response = WarnInsecure.run() if response != Gtk.ResponseType.OK: continue self.destroy() return password class PasswordLock(Password): "Asks for a password when the file is locked" def __init__(self, parent, password): Password.__init__( self, parent, _('Enter password to unlock file'), _('The current file has been locked, please enter the file password to unlock it.'), ui.STOCK_UNLOCK ) self.get_widget_for_response(Gtk.ResponseType.CANCEL).set_label(Gtk.STOCK_QUIT) self.set_default_response(Gtk.ResponseType.OK) self.password = password self.entry_password = self.add_entry(_('Password')) def run(self): "Displays the dialog" while True: try: response = Password.run(self) if response == Gtk.ResponseType.CANCEL: raise CancelError elif response != Gtk.ResponseType.OK: continue elif self.entry_password.get_text() == self.password: break else: Error(self, _('Incorrect password'), _('The password you entered was not correct, please try again.')).run() except CancelError: if self.get_widget_for_response(Gtk.ResponseType.CANCEL).get_property("sensitive") == True: self.destroy() raise else: continue self.destroy() class PasswordOpen(Password): "Password dialog for opening files" def __init__(self, parent, filename): Password.__init__( self, parent, _('Enter file password'), _('The file “%s” is encrypted. Please enter the file password to open it.') % filename, Gtk.STOCK_OPEN ) self.set_default_response(Gtk.ResponseType.OK) self.entry_password = self.add_entry(_('Password')) def run(self): "Displays the dialog" response = Password.run(self) password = self.entry_password.get_text() self.destroy() if response == Gtk.ResponseType.OK: return password else: raise CancelError class PasswordSave(Password): "Password dialog for saving data" def __init__(self, parent, filename): Password.__init__( self, parent, _('Enter password for file'), _('Please enter a password for the file \'%s\'. You will need this password to open the file at a later time.') % filename, Gtk.STOCK_SAVE ) self.entry_new = self.add_entry(_('New password'), ui.PasswordEntry()) self.entry_confirm = self.add_entry(_('Confirm password')) self.entry_confirm.autocheck = False def run(self): "Displays the dialog" while True: if Password.run(self) != Gtk.ResponseType.OK: self.destroy() raise CancelError elif self.entry_new.get_text() != self.entry_confirm.get_text(): Error(self, _('Passwords don\'t match'), _('The passwords you entered does not match.')).run() elif len(self.entry_new.get_text()) == 0: Error(self, _('No password entered'), _('You must enter a password for the new data file.')).run() else: password = self.entry_new.get_text() try: util.check_password(password) except ValueError as res: res = str(res).lower() WarnInsecure = Warning( self, _('Use insecure password?'), _('The password you entered is not secure; %s. Are you sure you want to use it?') % res ) WarnInsecure.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) WarnInsecure.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) WarnInsecure.set_default_response(Gtk.ResponseType.CANCEL) response = WarnInsecure.run() if response != Gtk.ResponseType.OK: continue self.destroy() return password # ENTRY DIALOGS # class EntryEdit(Utility): "A dialog for editing entries" def __init__(self, parent, title, e = None, cfg = None, clipboard = None): Utility.__init__(self, parent, title) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) if not e: self.add_button(ui.STOCK_NEW_ENTRY, Gtk.ResponseType.OK) else: self.add_button(ui.STOCK_UPDATE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.OK) self.config = cfg self.clipboard = clipboard self.entry_field = {} self.fielddata = {} self.widgetdata = {} # set up the ui self.sect_meta = self.add_section(title) self.sect_fields = self.add_section(_('Account Data')) self.sect_notes = self.add_section(_('Notes')) self.entry_name = ui.Entry() self.entry_name.set_width_chars(50) self.entry_name.set_tooltip_text(_('The name of the entry')) self.sect_meta.append_widget(_('Name'), self.entry_name) self.entry_desc = ui.Entry() self.entry_desc.set_tooltip_text(_('A description of the entry')) self.sect_meta.append_widget(_('Description'), self.entry_desc) self.dropdown = ui.EntryDropDown() self.dropdown.connect("changed", lambda w: self.__setup_fieldsect(self.dropdown.get_active_type()().fields)) eventbox = ui.EventBox(self.dropdown) eventbox.set_tooltip_text(_('The type of entry')) self.sect_meta.append_widget(_('Type'), eventbox) self.entry_notes = ui.EditableTextView() self.entry_notes.set_tooltip_text(_('Notes for the entry')) self.sect_notes.append_widget(None, self.entry_notes) # populate the dialog with data self.set_entry(e) def __setup_fieldsect(self, fields): "Generates a field section based on a field list" # store current field values for fieldtype, fieldentry in self.entry_field.items(): self.fielddata[fieldtype] = fieldentry.get_text() self.entry_field = {} self.sect_fields.clear() # generate field entries for field in fields: if type(field) in self.widgetdata: userdata = self.widgetdata[type(field)] elif field.datatype == entry.DATATYPE_PASSWORD: userdata = self.clipboard else: userdata = None fieldentry = ui.generate_field_edit_widget(field, self.config, userdata) self.entry_field[type(field)] = fieldentry if type(field) in self.fielddata: fieldentry.set_text(self.fielddata[type(field)]) if hasattr(fieldentry, "set_tooltip_text"): fieldentry.set_tooltip_text(field.description) elif hasattr(fieldentry, "entry") == True: fieldentry.entry.set_tooltip_text(field.description) self.sect_fields.append_widget(field.name, fieldentry) # show widgets self.sect_fields.show_all() def get_entry(self): "Generates an entry from the dialog contents" e = self.dropdown.get_active_type()() e.name = self.entry_name.get_text() e.description = self.entry_desc.get_text() e.notes = self.entry_notes.get_text() for field in e.fields: field.value = self.entry_field[type(field)].get_text() return e def run(self): "Displays the dialog" while True: self.show_all() if Utility.run(self) == Gtk.ResponseType.OK: e = self.get_entry() if e.name == "": Error(self, _('Name not entered'), _('You must enter a name for the account')).run() continue self.destroy() return e else: self.destroy() raise CancelError def set_entry(self, e): "Sets an entry for the dialog" e = e is not None and e.copy() or entry.GenericEntry() self.entry_name.set_text(e.name) self.entry_desc.set_text(e.description) self.entry_notes.set_text(e.notes) self.dropdown.set_active_type(type(e)) for field in e.fields: self.entry_field[type(field)].set_text(field.value or "") def set_fieldwidget_data(self, fieldtype, userdata): "Sets user data for fieldwidget" self.widgetdata[fieldtype] = userdata if fieldtype == entry.UsernameField and entry.UsernameField in self.entry_field: self.entry_field[entry.UsernameField].set_values(userdata) class EntryRemove(Warning): "Asks for confirmation when removing entries" def __init__(self, parent, entries): if len(entries) > 1: title = _('Really remove the %i selected entries?') % len(entries) text = _('By removing these entries you will also remove any entries they may contain.') elif type(entries[0]) == entry.FolderEntry: title = _('Really remove folder \'%s\'?') % entries[0].name text = _('By removing this folder you will also remove all accounts and folders it contains.') else: title = _('Really remove account \'%s\'?') % entries[0].name text = _('Please confirm that you wish to remove this account.') Warning.__init__(self, parent, title, text) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.add_button(Gtk.STOCK_REMOVE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.CANCEL) def run(self): "Displays the dialog" if Warning.run(self) == Gtk.ResponseType.OK: return True else: raise CancelError class FolderEdit(Utility): "Dialog for editing a folder" def __init__(self, parent, title, e = None): Utility.__init__(self, parent, title) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) if not e: self.add_button(ui.STOCK_NEW_FOLDER, Gtk.ResponseType.OK) else: self.add_button(ui.STOCK_UPDATE, Gtk.ResponseType.OK) self.set_default_response(Gtk.ResponseType.OK) # set up the ui self.sect_folder = self.add_section(title) self.entry_name = ui.Entry() self.entry_name.set_width_chars(25) self.entry_name.set_tooltip_text(_('The name of the folder')) self.sect_folder.append_widget(_('Name'), self.entry_name) self.entry_desc = ui.Entry() self.entry_desc.set_tooltip_text(_('A description of the folder')) self.sect_folder.append_widget(_('Description'), self.entry_desc) # populate the dialog with data self.set_entry(e) def get_entry(self): "Generates an entry from the dialog contents" e = entry.FolderEntry() e.name = self.entry_name.get_text() e.description = self.entry_desc.get_text() return e def run(self): "Displays the dialog" while True: self.show_all() if Utility.run(self) == Gtk.ResponseType.OK: e = self.get_entry() if e.name == "": Error(self, _('Name not entered'), _('You must enter a name for the folder')).run() continue self.destroy() return e else: self.destroy() raise CancelError def set_entry(self, e): "Sets an entry for the dialog" if e is None: return self.entry_name.set_text(e.name) self.entry_desc.set_text(e.description) # MISCELLANEOUS DIALOGS # class About(Gtk.AboutDialog): "About dialog" def __init__(self, parent): Gtk.AboutDialog.__init__(self) if isinstance(parent, Gtk.Window): self.set_transient_for(parent) self.set_name(config.APPNAME) self.set_version(config.VERSION) self.set_copyright(config.COPYRIGHT) self.set_comments(('"%s"\n\n' + _('A password manager for the GNOME desktop')) % config.RELNAME) self.set_license(config.LICENSE) self.set_website(config.URL) self.set_authors(config.AUTHORS) self.set_artists(config.ARTISTS) def run(self): "Displays the dialog" self.show_all() Gtk.AboutDialog.run(self) self.destroy() class Exception(Error): "Displays a traceback for an unhandled exception" def __init__(self, parent, traceback): Error.__init__( self, parent, _('Unknown error'), _('An unknown error occured. Please report the text below to the Revelation developers, along with what you were doing that may have caused the error. You may attempt to continue running Revelation, but it may behave unexpectedly.') ) self.add_button(Gtk.STOCK_QUIT, Gtk.ResponseType.CANCEL) self.add_button(ui.STOCK_CONTINUE, Gtk.ResponseType.OK) textview = ui.TextView(None, traceback) scrolledwindow = ui.ScrolledWindow(textview) scrolledwindow.set_size_request(-1, 120) self.contents.pack_start(scrolledwindow, True, True, 0) def run(self): "Runs the dialog" return Error.run(self) == Gtk.ResponseType.OK class PasswordChecker(Utility): "A password checker dialog" def __init__(self, parent, cfg = None, clipboard = None): Utility.__init__(self, parent, _('Password Checker')) self.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE) self.set_default_response(Gtk.ResponseType.CLOSE) self.cfg = cfg self.set_modal(False) self.set_size_request(300, -1) self.section = self.add_section(_('Password Checker')) self.entry = ui.PasswordEntry(None, cfg, clipboard) self.entry.autocheck = False self.entry.set_width_chars(40) self.entry.connect("changed", self.__cb_changed) self.entry.set_tooltip_text(_('Enter a password to check')) self.section.append_widget(_('Password'), self.entry) self.result = ui.ImageLabel(_('Enter a password to check'), ui.STOCK_UNKNOWN, ui.ICON_SIZE_HEADLINE) self.result.set_tooltip_text(_('The result of the check')) self.section.append_widget(None, self.result) self.connect("response", self.__cb_response) def __cb_changed(self, widget, data = None): "Callback for entry changes" password = self.entry.get_text() try: if len(password) == 0: icon = ui.STOCK_UNKNOWN result = _('Enter a password to check') else: util.check_password(password) icon = ui.STOCK_PASSWORD_STRONG result = _('The password seems good') except ValueError as reason: icon = ui.STOCK_PASSWORD_WEAK result = _('The password %s') % str(reason) self.result.set_text(result) self.result.set_stock(icon, ui.ICON_SIZE_HEADLINE) def __cb_response(self, widget, response): "Callback for response" self.destroy() def run(self): "Displays the dialog" self.show_all() # for some reason, Gtk crashes on close-by-escape # if we don't do this self.get_widget_for_response(Gtk.ResponseType.CLOSE).grab_focus() self.entry.grab_focus() class PasswordGenerator(Utility): "A password generator dialog" def __init__(self, parent, cfg, clipboard = None): Utility.__init__(self, parent, _('Password Generator')) self.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE) self.add_button(ui.STOCK_GENERATE, Gtk.ResponseType.OK) self.config = cfg self.set_modal(False) self.section = self.add_section(_('Password Generator')) self.entry = ui.PasswordEntry(None, cfg, clipboard) self.entry.autocheck = False self.entry.set_editable(False) self.entry.set_tooltip_text(_('The generated password')) self.section.append_widget(_('Password'), self.entry) self.spin_pwlen = ui.SpinEntry() self.spin_pwlen.set_range(4, 256) self.config.bind("passwordgen-length", self.spin_pwlen, "value", Gio.SettingsBindFlags.DEFAULT) self.spin_pwlen.set_tooltip_text(_('The number of characters in generated passwords - 8 or more are recommended')) self.section.append_widget(_('Length'), self.spin_pwlen) self.check_punctuation_chars = ui.CheckButton(_('Use punctuation characters for passwords')) if self.config.get_int("passwordgen-length"): self.check_punctuation_chars.set_sensitive(True) self.config.bind("passwordgen-punctuation", self.check_punctuation_chars, "active", Gio.SettingsBindFlags.DEFAULT) self.check_punctuation_chars.set_tooltip_text(_('When passwords are generated, use punctuation characters like %, =, { or .')) self.section.append_widget(None, self.check_punctuation_chars) self.connect("response", self.__cb_response) def __cb_response(self, widget, response): "Callback for dialog responses" if response == Gtk.ResponseType.OK: self.entry.set_text(util.generate_password(self.spin_pwlen.get_value(), self.check_punctuation_chars.get_active())) else: self.destroy() def run(self): "Displays the dialog" self.show_all() self.get_widget_for_response(Gtk.ResponseType.OK).grab_focus() # FUNCTIONS # def create_unique(dialog, *args): "Creates a unique dialog" if present_unique(dialog) == True: return get_unique(dialog) else: UNIQUE_DIALOGS[dialog] = dialog(*args) UNIQUE_DIALOGS[dialog].connect("destroy", lambda w: remove_unique(dialog)) return UNIQUE_DIALOGS[dialog] def get_unique(dialog): "Returns a unique dialog" if unique_exists(dialog) == True: return UNIQUE_DIALOGS[dialog] else: return None def present_unique(dialog): "Presents a unique dialog, if it exists" if unique_exists(dialog) == True: get_unique(dialog).present() return True else: return False def remove_unique(dialog): "Removes a unique dialog" if unique_exists(dialog): UNIQUE_DIALOGS[dialog] = None def run_unique(dialog, *args): "Runs a unique dialog" if present_unique(dialog) == True: return None else: d = create_unique(dialog, *args) return d.run() def unique_exists(dialog): "Checks if a unique dialog exists" return dialog in UNIQUE_DIALOGS and UNIQUE_DIALOGS[dialog] != None revelation-revelation-0.5.5/src/lib/entry.py000066400000000000000000000342671423125252400211230ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module containing entry information # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from revelation import ui import copy import gettext import time _ = gettext.gettext DATATYPE_FILE = "file" DATATYPE_EMAIL = "email" DATATYPE_PASSWORD = "password" # nosec DATATYPE_STRING = "string" DATATYPE_URL = "url" class EntryFieldError(Exception): "Exception for invalid entry fields" pass class EntryTypeError(Exception): "Exception for invalid entry types" pass class Entry(object): "An entry object" id = None typename = "" icon = None def __init__(self): self.name = "" self.description = "" self.notes = "" self.updated = int(time.time()) self.fields = [] def __getitem__(self, key): return self.get_field(key).value def __setitem__(self, key, value): self.get_field(key).value = value def convert_generic(self): "Creates a GenericEntry with the data from this entry" generic = GenericEntry() generic.name = self.name generic.description = self.description generic.notes = self.notes generic.updated = self.updated # do direct field copies for field in generic.fields: if self.has_field(type(field)): field.value = self[type(field)] # handle special conversions if type(self) == CreditcardEntry: generic[UsernameField] = self[CardnumberField] generic[PasswordField] = self[PINField] elif type(self) == CryptoKeyEntry: generic[UsernameField] = self[KeyfileField] elif type(self) == DatabaseEntry: if self[DatabaseField] != "": generic[HostnameField] = self[DatabaseField] + "@" + self[HostnameField] elif type(self) == DoorEntry: generic[PasswordField] = self[CodeField] generic[HostnameField] = self[LocationField] elif type(self) == FTPEntry: if self[PortField] not in ("", "21"): generic[HostnameField] += ":" + self[PortField] elif type(self) == PhoneEntry: generic[UsernameField] = self[PhonenumberField] generic[PasswordField] = self[PINField] elif type(self) == WebEntry: generic[HostnameField] = self[URLField] return generic def copy(self): "Create a copy of the entry" return copy.deepcopy(self) def get_field(self, fieldtype): "Get one of the entrys fields" for field in self.fields: if type(field) == fieldtype: return field else: raise EntryFieldError def has_field(self, fieldtype): "Check if the entry has a field" try: self.get_field(fieldtype) return True except EntryFieldError: return False def mirror(self, entry): "Makes this entry mirror a different entry (same data)" if type(self) != type(entry): raise EntryTypeError self.name = entry.name self.description = entry.description self.notes = entry.notes self.updated = entry.updated for field in entry.fields: self[type(field)] = field.value class FolderEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "folder" self.typename = _('Folder') self.icon = ui.STOCK_ENTRY_FOLDER self.openicon = ui.STOCK_ENTRY_FOLDER_OPEN class CreditcardEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "creditcard" self.typename = _('Creditcard') self.icon = ui.STOCK_ENTRY_CREDITCARD self.fields = [ CardtypeField(), CardnumberField(), ExpirydateField(), CCVField(), PINField() ] class CryptoKeyEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "cryptokey" self.typename = _('Crypto Key') self.icon = ui.STOCK_ENTRY_CRYPTOKEY self.fields = [ HostnameField(), CertificateField(), KeyfileField(), PasswordField() ] class DatabaseEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "database" self.typename = _('Database') self.icon = ui.STOCK_ENTRY_DATABASE self.fields = [ HostnameField(), UsernameField(), PasswordField(), DatabaseField() ] class DoorEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "door" self.typename = _('Door lock') self.icon = ui.STOCK_ENTRY_DOOR self.fields = [ LocationField(), CodeField() ] class EmailEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "email" self.typename = _('Email') self.icon = ui.STOCK_ENTRY_EMAIL self.fields = [ EmailField(), HostnameField(), UsernameField(), PasswordField() ] class FTPEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "ftp" self.typename = _('FTP') self.icon = ui.STOCK_ENTRY_FTP self.fields = [ HostnameField(), PortField(), UsernameField(), PasswordField() ] class GenericEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "generic" self.typename = _('Generic') self.icon = ui.STOCK_ENTRY_GENERIC self.fields = [ HostnameField(), UsernameField(), PasswordField() ] class PhoneEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "phone" self.typename = _('Phone') self.icon = ui.STOCK_ENTRY_PHONE self.fields = [ PhonenumberField(), PINField() ] class ShellEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "shell" self.typename = _('Shell') self.icon = ui.STOCK_ENTRY_SHELL self.fields = [ HostnameField(), DomainField(), UsernameField(), PasswordField() ] class RemoteDesktopEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "remotedesktop" self.typename = _('Remote Desktop') self.icon = ui.STOCK_ENTRY_REMOTEDESKTOP self.fields = [ HostnameField(), PortField(), UsernameField(), PasswordField() ] class WebEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "website" self.typename = _('Website') self.icon = ui.STOCK_ENTRY_WEBSITE self.fields = [ URLField(), UsernameField(), EmailField(), PasswordField() ] class VNCEntry(Entry): def __init__(self): Entry.__init__(self) self.id = "vnc" self.typename = _('VNC') self.icon = ui.STOCK_ENTRY_REMOTEDESKTOP self.fields = [ HostnameField(), PortField(), UsernameField(), PasswordField() ] ENTRYLIST = [ FolderEntry, CreditcardEntry, CryptoKeyEntry, DatabaseEntry, DoorEntry, EmailEntry, FTPEntry, GenericEntry, PhoneEntry, ShellEntry, RemoteDesktopEntry, VNCEntry, WebEntry ] class Field(object): "An entry field object" id = None name = "" description = "" symbol = None datatype = None value = None def __init__(self, value = ""): self.value = value def __str__(self): return self.value is not None and self.value or "" class CardnumberField(Field): id = "creditcard-cardnumber" symbol = "N" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Card number') self.description = _('The number of a creditcard, usually a 16-digit number') class CardtypeField(Field): id = "creditcard-cardtype" symbol = "C" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Card type') self.description = _('The type of creditcard, like MasterCard or VISA') class CCVField(Field): id = "creditcard-ccv" symbol = "V" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('CCV number') self.description = _('A Credit Card Verification number, normally a 3-digit code found on the back of a card') class CertificateField(Field): id = "generic-certificate" symbol = "x" datatype = DATATYPE_FILE def __init__(self, value = ""): self.name = _('Certificate') self.description = _('A certificate, such as an X.509 SSL Certificate') class CodeField(Field): id = "generic-code" symbol = "c" datatype = DATATYPE_PASSWORD def __init__(self, value = ""): self.name = _('Code') self.description = _('A code used to provide access to something') class DatabaseField(Field): id = "generic-database" symbol = "D" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Database') self.description = _('A database name') class DomainField(Field): id = "generic-domain" symbol = "d" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Domain') self.description = _('An Internet or logon domain, like organization.org or a Windows logon domain') class EmailField(Field): id = "generic-email" symbol = "e" datatype = DATATYPE_EMAIL def __init__(self, value = ""): self.name = _('Email') self.description = _('An email address') class ExpirydateField(Field): id = "creditcard-expirydate" symbol = "E" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Expiry date') self.description = _('The month that the credit card validity expires') class HostnameField(Field): id = "generic-hostname" symbol = "h" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Hostname') self.description = _('The name of a computer, like computer.domain.com or MYCOMPUTER') class KeyfileField(Field): id = "generic-keyfile" symbol = "f" datatype = DATATYPE_FILE def __init__(self, value = ""): self.name = _('Key File') self.description = _('A key file, used for authentication for example via ssh or to encrypt X.509 certificates') class LocationField(Field): id = "generic-location" symbol = "L" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Location') self.description = _('A physical location, like office entrance') class PasswordField(Field): id = "generic-password" symbol = "p" datatype = DATATYPE_PASSWORD def __init__(self, value = ""): self.name = _('Password') self.description = _('A secret word or character combination used for proving you have access') class PhonenumberField(Field): id = "phone-phonenumber" symbol = "n" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Phone number') self.description = _('A telephone number') class PINField(Field): id = "generic-pin" symbol = "P" datatype = DATATYPE_PASSWORD def __init__(self, value = ""): self.name = _('PIN') self.description = _('A Personal Identification Number, a numeric code used for credit cards, phones etc') class PortField(Field): id = "generic-port" symbol = "o" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Port number') self.description = _('A network port number, used to access network services directly') class URLField(Field): id = "generic-url" symbol = "U" datatype = DATATYPE_URL def __init__(self, value = ""): self.name = _('URL') self.description = _('A Uniform Resource Locator, such as a web-site address') class UsernameField(Field): id = "generic-username" symbol = "u" datatype = DATATYPE_STRING def __init__(self, value = ""): self.name = _('Username') self.description = _('A name or other identification used to identify yourself') FIELDLIST = [ CardnumberField, CardtypeField, CCVField, CertificateField, CodeField, DatabaseField, DomainField, EmailField, ExpirydateField, HostnameField, KeyfileField, LocationField, PasswordField, PhonenumberField, PINField, PortField, URLField, UsernameField ] revelation-revelation-0.5.5/src/lib/io.py000066400000000000000000000136061423125252400203630ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for IO-related functionality # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import datahandler import os.path import re from gi.repository import Gio, GObject, GLib class DataFile(GObject.GObject): "Handles data files" def __init__(self, handler): GObject.GObject.__init__(self) self.__uri = None self.__handler = None self.__password = None self.__monitorhandle = None self.set_handler(handler) def __str__(self): return self.get_file() or "" def __cb_monitor(self, monitor_uri, info_uri, event, data = None): "Callback for file monitoring" if event == Gio.FileMonitorEvent.CHANGED: self.emit("content-changed", self.get_file()) def __monitor(self, file): "Starts monitoring a file" self.__monitor_stop() if file != None: self.__monitorhandle = file_monitor(file, self.__cb_monitor) def __monitor_stop(self): "Stops monitoring the current file" if self.__monitorhandle != None: file_monitor_cancel(self.__monitorhandle) self.__monitorhandle = None def close(self): "Closes the current file" self.set_password(None) self.set_file(None) def get_file(self): "Gets the current file" return self.__uri and re.sub("^file://", "", str(self.__uri)) or None def get_handler(self): "Gets the current handler" return self.__handler def get_password(self): "Gets the current password" return self.__password def load(self, file, password = None, pwgetter = None): "Loads a file" file = file_normpath(file) data = file_read(file) if self.__handler is None: self.__handler = datahandler.detect_handler(data)() self.__handler.check(data) if self.__handler.encryption == True and password is None and pwgetter != None: password = pwgetter() entrystore = self.__handler.import_data(data, password) self.set_password(password) self.set_file(file) return entrystore def save(self, entrystore, file, password = None): "Saves an entrystore to a file" self.__monitor_stop() file_write(file, self.__handler.export_data(entrystore, password)) # need to use idle_add() to avoid notifying about current save GLib.idle_add(lambda: self.__monitor(file)) self.set_password(password) self.set_file(file) def set_file(self, file): "Sets the current file" uri = file is not None and file_normpath(file) or None if self.__uri != uri: self.__uri = uri self.emit("changed", file) self.__monitor(file) def set_handler(self, handler): "Sets and initializes the current data handler" self.__handler = handler is not None and handler() or None def set_password(self, password): "Sets the password for the current file" self.__password = password GObject.type_register(DataFile) GObject.signal_new("changed", DataFile, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, (str,)) GObject.signal_new("content-changed", DataFile, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, (str,)) def file_exists(file): "Checks if a file exists" if file is None: return False return Gio.File.new_for_path(file).query_exists() def file_is_local(file): "Checks if a file is on a local filesystem" if file is None: return False return Gio.File.new_for_path(file).get_uri_scheme() == 'file' def file_monitor(file, callback): "Starts monitoring a file" try: handle = Gio.File.new_for_path(file).monitor_file(Gio.FileMonitorFlags.NONE, None) handle.connect('changed', callback) return handle except GLib.GError: return None def file_monitor_cancel(handle): "Cancels file monitoring" handle.cancel() def file_normpath(file): "Normalizes a file path" if file in (None, ""): return "" file = re.sub("^file:/{,2}", "", file) file = os.path.expanduser(file) if not re.match("^[a-zA-Z]+://", file) and file[0] != "/": file = os.path.abspath(file) # Does URI() do anything useful with the input? -thomas jenkins # return re.sub("^file:/{,2}", "", str(gnomevfs.URI(file))) return file def file_read(file): "Reads data from a file" try: if file is None: raise IOError ok, contents, etag = Gio.File.new_for_path(file).load_contents() return contents except GLib.GError: raise IOError def file_write(file, data): "Writes data to file" try: if file is None: raise IOError if data is None: data = "" if isinstance(data, str): data = data.encode() ok, etag = Gio.File.new_for_path(file).replace_contents(data, None, True, Gio.FileCreateFlags.REPLACE_DESTINATION, None) return ok except GLib.GError: raise IOError revelation-revelation-0.5.5/src/lib/ui.py000066400000000000000000001357111423125252400203730ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module for UI functionality # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # from . import config, data, dialog, entry, io, util import gettext import time import gi gi.require_version('Gtk', '3.0') from gi.repository import GObject, Gtk, Gdk, Gio, Pango # noqa: E402 _ = gettext.gettext STOCK_CONTINUE = _("_Continue") # "revelation-continue" STOCK_DISCARD = "revelation-discard" STOCK_EDIT = "revelation-edit" STOCK_EXPORT = _("_Export") # "revelation-export" STOCK_FOLDER = "revelation-folder" STOCK_GENERATE = _("_Generate") # "revelation-generate" STOCK_IMPORT = _("_Import") # "revelation-import" STOCK_GOTO = "revelation-goto" STOCK_LOCK = "revelation-lock" STOCK_NEW_ENTRY = _("_Add Entry") # "revelation-new-entry" STOCK_NEW_FOLDER = _("_Add Folder") # "revelation-new-folder" STOCK_NEXT = "go-down" # "revelation-next" STOCK_PASSWORD_CHANGE = _("_Change") # "revelation-password-change" STOCK_PASSWORD_CHECK = "revelation-password-check" # nosec STOCK_PASSWORD_STRONG = "security-high" # nosec "revelation-password-strong" STOCK_PASSWORD_WEAK = "security-low" # nosec "revelation-password-weak" STOCK_PREVIOUS = "go-up" # "revelation-previous" STOCK_RELOAD = _("_Reload") # "revelation-reload" STOCK_REMOVE = "revelation-remove" STOCK_REPLACE = _("_Replace") # "revelation-replace" STOCK_UNKNOWN = "dialog-question" # "revelation-unknown" STOCK_UNLOCK = _("_Unlock") # "revelation-unlock" STOCK_UPDATE = _("_Update") # "revelation-update" STOCK_ENTRY_FOLDER = "folder" # "revelation-account-folder" STOCK_ENTRY_FOLDER_OPEN = "folder-open" # "revelation-account-folder-open" STOCK_ENTRY_CREDITCARD = "x-office-contact" # "revelation-account-creditcard" STOCK_ENTRY_CRYPTOKEY = "dialog-password" # "revelation-account-cryptokey" STOCK_ENTRY_DATABASE = "server-database" # "revelation-account-database" STOCK_ENTRY_DOOR = "changes-allow" # "revelation-account-door" STOCK_ENTRY_EMAIL = "emblem-mail" # "revelation-account-email" STOCK_ENTRY_FTP = "system-file-manager" # "revelation-account-ftp" STOCK_ENTRY_GENERIC = "document-new" # "revelation-account-generic" STOCK_ENTRY_PHONE = "phone" # "revelation-account-phone" STOCK_ENTRY_SHELL = "utilities-terminal" # "revelation-account-shell" STOCK_ENTRY_REMOTEDESKTOP = "preferences-desktop-remote-desktop" # "revelation-account-remotedesktop" STOCK_ENTRY_WEBSITE = "web-browser" # "revelation-account-website" ICON_SIZE_APPLET = Gtk.IconSize.LARGE_TOOLBAR ICON_SIZE_DATAVIEW = Gtk.IconSize.LARGE_TOOLBAR ICON_SIZE_DROPDOWN = Gtk.IconSize.SMALL_TOOLBAR ICON_SIZE_ENTRY = Gtk.IconSize.MENU ICON_SIZE_FALLBACK = Gtk.IconSize.LARGE_TOOLBAR ICON_SIZE_HEADLINE = Gtk.IconSize.LARGE_TOOLBAR ICON_SIZE_LABEL = Gtk.IconSize.MENU ICON_SIZE_LOGO = Gtk.IconSize.DND ICON_SIZE_TREEVIEW = Gtk.IconSize.MENU STOCK_ICONS = ( (STOCK_ENTRY_CREDITCARD, "contact-new", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_CRYPTOKEY, "dialog-password", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_DATABASE, "package_system", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_DOOR, "changes-allow", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_EMAIL, "emblem-mail", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_FTP, "system-file-manager", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_GENERIC, "document-new", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_PHONE, "phone", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_SHELL, "utilities-terminal", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_REMOTEDESKTOP, "preferences-desktop-remote-desktop", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_WEBSITE, "web-browser", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_FOLDER, "folder", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), (STOCK_ENTRY_FOLDER_OPEN, "folder-open", (ICON_SIZE_DATAVIEW, ICON_SIZE_DROPDOWN, ICON_SIZE_ENTRY, ICON_SIZE_TREEVIEW)), ) STOCK_ITEMS = ( (STOCK_CONTINUE, _('_Continue'), "stock_test-mode"), (STOCK_DISCARD, _('_Discard'), Gtk.STOCK_DELETE), (STOCK_EDIT, _('_Edit'), Gtk.STOCK_EDIT), (STOCK_EXPORT, _('_Export'), Gtk.STOCK_EXECUTE), (STOCK_FOLDER, '', "stock_folder"), (STOCK_GENERATE, _('_Generate'), Gtk.STOCK_EXECUTE), (STOCK_GOTO, _('_Go to'), Gtk.STOCK_JUMP_TO), (STOCK_IMPORT, _('_Import'), Gtk.STOCK_CONVERT), (STOCK_LOCK, _('_Lock'), "stock_lock"), (STOCK_NEW_ENTRY, _('_Add Entry'), Gtk.STOCK_ADD), (STOCK_NEW_FOLDER, _('_Add Folder'), "stock_folder"), (STOCK_NEXT, _('Next'), Gtk.STOCK_GO_DOWN), (STOCK_PASSWORD_CHANGE, _('_Change'), "stock_lock-ok"), (STOCK_PASSWORD_CHECK, _('_Check'), "stock_lock-ok"), (STOCK_PASSWORD_STRONG, '', "stock_lock-ok"), (STOCK_PASSWORD_WEAK, '', "stock_lock-broken"), (STOCK_PREVIOUS, _('Previous'), Gtk.STOCK_GO_UP), (STOCK_RELOAD, _('_Reload'), Gtk.STOCK_REFRESH), (STOCK_REMOVE, _('Re_move'), Gtk.STOCK_DELETE), (STOCK_REPLACE, _('_Replace'), Gtk.STOCK_SAVE_AS), (STOCK_UNKNOWN, _('Unknown'), "dialog-question"), (STOCK_UNLOCK, _('_Unlock'), "stock_lock-open"), (STOCK_UPDATE, _('_Update'), "stock_edit"), ) # EXCEPTIONS # class DataError(Exception): "Exception for invalid data" pass # FUNCTIONS # def generate_field_display_widget(field, cfg = None, userdata = None): "Generates a widget for displaying a field value" if field.datatype == entry.DATATYPE_EMAIL: widget = LinkButton("mailto:%s" % field.value, util.escape_markup(field.value)) elif field.datatype == entry.DATATYPE_PASSWORD: widget = PasswordLabel(util.escape_markup(field.value), cfg, userdata) elif field.datatype == entry.DATATYPE_URL: widget = LinkButton(field.value, util.escape_markup(field.value)) else: widget = Label(util.escape_markup(field.value)) widget.set_selectable(True) return widget def generate_field_edit_widget(field, cfg = None, userdata = None): "Generates a widget for editing a field" if type(field) == entry.PasswordField: widget = PasswordEntryGenerate(None, cfg, userdata) elif type(field) == entry.UsernameField: widget = Gtk.ComboBox.new_with_entry() setup_comboboxentry(widget, userdata) elif field.datatype == entry.DATATYPE_FILE: widget = FileEntry() elif field.datatype == entry.DATATYPE_PASSWORD: widget = PasswordEntry(None, cfg, userdata) else: widget = Entry() widget.set_text(field.value or "") return widget def setup_comboboxentry(widget, userdata=None): widget.entry = widget.get_child() widget.entry.set_activates_default(True) widget.set_text = widget.entry.set_text widget.get_text = widget.entry.get_text widget.model = Gtk.ListStore(GObject.TYPE_STRING) widget.set_model(widget.model) widget.set_entry_text_column(0) widget.completion = Gtk.EntryCompletion() widget.completion.set_model(widget.model) widget.completion.set_text_column(0) widget.completion.set_minimum_key_length(1) widget.entry.set_completion(widget.completion) def set_values(vlist): "Sets the values for the dropdown" widget.model.clear() for item in vlist: widget.model.append((item,)) widget.set_values = set_values if userdata is not None: widget.set_values(userdata) # CONTAINERS # class HBox(Gtk.HBox): "A horizontal container" def __init__(self, *args): Gtk.HBox.__init__(self) self.set_spacing(6) self.set_border_width(0) for widget in args: self.pack_start(widget, True, True, 0) class HButtonBox(Gtk.HButtonBox): "A horizontal button box" def __init__(self, *args): Gtk.HButtonBox.__init__(self) self.set_layout(Gtk.ButtonBoxStyle.SPREAD) self.set_spacing(12) for button in args: self.pack_start(button, True, True, 0) class VBox(Gtk.VBox): "A vertical container" def __init__(self, *args): Gtk.VBox.__init__(self) self.set_spacing(6) self.set_border_width(0) for widget in args: self.pack_start(widget, True, True, 0) class Notebook(Gtk.Notebook): "A notebook (tabbed view)" def __init__(self): Gtk.Notebook.__init__(self) def create_page(self, title): "Creates a notebook page" page = NotebookPage() self.append_page(page, Label(title)) return page class NotebookPage(VBox): "A notebook page" def __init__(self): VBox.__init__(self) self.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) self.set_border_width(12) self.set_spacing(18) def add_section(self, title, description = None): "Adds an input section to the notebook" section = InputSection(title, description, self.sizegroup) self.pack_start(section, False, False, 0) return section class ScrolledWindow(Gtk.ScrolledWindow): "A scrolled window for partially displaying a child widget" def __init__(self, contents = None): Gtk.ScrolledWindow.__init__(self) self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) if contents is not None: self.add(contents) class Toolbar(Gtk.Toolbar): "A Toolbar subclass" def append_space(self): "Appends a space to the toolbar" space = Gtk.SeparatorToolItem() space.set_draw(False) self.insert(space, -1) def append_widget(self, widget, tooltip = None): "Appends a widget to the toolbar" toolitem = Gtk.ToolItem() toolitem.add(widget) if tooltip != None: toolitem.set_tooltip_text(tooltip) self.insert(toolitem, -1) class InputSection(VBox): "A section of input fields" def __init__(self, title = None, description = None, sizegroup = None): VBox.__init__(self) self.title = None self.desc = None self.sizegroup = sizegroup if title is not None: self.title = Label("%s" % util.escape_markup(title)) self.pack_start(self.title, False, True, 0) if description is not None: self.desc = Label(util.escape_markup(description)) self.pack_start(self.desc, False, True, 0) if sizegroup is None: self.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) def append_widget(self, title, widget, indent = True): "Adds a widget to the section" row = HBox() row.set_spacing(12) self.pack_start(row, False, False, 0) if self.title is not None and indent == True: row.pack_start(Label(""), False, False, 0) if title is not None: label = Label("%s:" % util.escape_markup(title)) self.sizegroup.add_widget(label) row.pack_start(label, False, False, 0) row.pack_start(widget, True, True, 0) def clear(self): "Removes all widgets" for child in self.get_children(): if child not in (self.title, self.desc): child.destroy() # DISPLAY WIDGETS # class EventBox(Gtk.EventBox): "A container which handles events for a widget (for tooltips etc)" def __init__(self, widget = None): Gtk.EventBox.__init__(self) if widget is not None: self.add(widget) class Image(Gtk.Image): "A widget for displaying an image" def __init__(self, stock = None, size = None): Gtk.Image.__init__(self) if stock is not None: self.set_from_icon_name(stock, size) class ImageLabel(HBox): "A label with an image" def __init__(self, text = None, stock = None, size = ICON_SIZE_LABEL): HBox.__init__(self) self.image = Image() self.pack_start(self.image, False, True, 0) self.label = Label(text) self.pack_start(self.label, True, True, 0) if text != None: self.set_text(text) if stock != None: self.set_stock(stock, size) def set_ellipsize(self, ellipsize): "Sets label ellisization" self.label.set_ellipsize(ellipsize) def set_stock(self, stock, size): "Sets the image" self.image.set_from_icon_name(stock, size) def set_text(self, text): "Sets the label text" self.label.set_text(text) class Label(Gtk.Label): "A text label" def __init__(self, text = None, justify = Gtk.Justification.LEFT): Gtk.Label.__init__(self) self.set_text(text) self.set_justify(justify) self.set_use_markup(True) self.set_line_wrap(True) self.set_valign(Gtk.Align.CENTER) if justify == Gtk.Justification.LEFT: self.set_halign(Gtk.Align.START) elif justify == Gtk.Justification.CENTER: self.set_halign(Gtk.Align.CENTER) elif justify == Gtk.Justification.RIGHT: self.set_halign(Gtk.Align.END) def set_text(self, text): "Sets the text of the label" if text is None: Gtk.Label.set_text(self, "") else: Gtk.Label.set_markup(self, text) class PasswordLabel(EventBox): "A label for displaying passwords" def __init__(self, password = "", cfg = None, clipboard = None, justify = Gtk.Justification.LEFT): # nosec EventBox.__init__(self) self.password = util.unescape_markup(password) self.config = cfg self.clipboard = clipboard self.label = Label(util.escape_markup(self.password), justify) self.label.set_selectable(True) self.add(self.label) self.show_password(cfg.get_boolean("view-passwords")) self.config.connect('changed::view-passwords', lambda w, k: self.show_password(w.get_boolean(k))) self.connect("button-press-event", self.__cb_button_press) self.connect("drag-data-get", self.__cb_drag_data_get) def __cb_drag_data_get(self, widget, context, selection, info, timestamp, data = None): "Provides data for a drag operation" selection.set_text(self.password, -1) def __cb_button_press(self, widget, data = None): "Populates the popup menu" if self.label.get_selectable() == True: return False elif data.button == 3: menu = Menu() menuitem = ImageMenuItem(Gtk.STOCK_COPY, _('Copy password')) menuitem.connect("activate", lambda w: self.clipboard.set([self.password], True)) menu.append(menuitem) menu.show_all() menu.popup_at_pointer(data) return True def set_ellipsize(self, ellipsize): "Sets ellipsize for the label" self.label.set_ellipsize(ellipsize) def show_password(self, show = True): "Sets whether to display the password" if show == True: self.label.set_text(util.escape_markup(self.password)) self.label.set_selectable(True) self.drag_source_unset() else: self.label.set_text(Gtk.Entry().get_invisible_char()*6) self.label.set_selectable(False) self.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, [ Gtk.TargetEntry.new("text/plain", 0, 0), Gtk.TargetEntry.new("TEXT", 0, 1), Gtk.TargetEntry.new("STRING", 0, 2), Gtk.TargetEntry.new("COMPOUND TEXT", 0, 3), Gtk.TargetEntry.new("UTF8_STRING", 0, 4) ], Gdk.DragAction.COPY ) class EditableTextView(Gtk.ScrolledWindow): "An editable text view" def __init__(self, buffer = None, text = None): Gtk.ScrolledWindow.__init__(self) self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.set_shadow_type(Gtk.ShadowType.ETCHED_OUT) self.textview = Gtk.TextView(buffer=buffer) self.textbuffer = self.textview.get_buffer() self.add(self.textview) if text is not None: self.textview.get_buffer().set_text(text) def set_text(self, text): "Sets the entry contents" if text is None: self.textbuffer.set_text("") self.textbuffer.set_text(text) def get_text(self): "Returns the text of the entry" return self.textbuffer.get_text(self.textbuffer.get_start_iter(), self.textbuffer.get_end_iter(), False) class TextView(Gtk.TextView): "A text view" def __init__(self, buffer = None, text = None): Gtk.TextView.__init__(self) self.set_buffer(buffer) self.set_editable(False) self.set_wrap_mode(Gtk.WrapMode.NONE) self.set_cursor_visible(False) self.modify_font(Pango.FontDescription("Monospace")) if text is not None: self.get_buffer().set_text(text) # TEXT ENTRIES # class Entry(Gtk.Entry): "A normal text entry" def __init__(self, text = None): Gtk.Entry.__init__(self) self.set_activates_default(True) self.set_text(text) def set_text(self, text): "Sets the entry contents" if text is None: text = "" Gtk.Entry.set_text(self, text) class FileEntry(HBox): "A file entry" def __init__(self, title = None, file = None, type = Gtk.FileChooserAction.OPEN): HBox.__init__(self) self.title = title is not None and title or _('Select File') self.type = type self.entry = Entry() self.entry.connect("changed", lambda w: self.emit("changed")) self.pack_start(self.entry, True, True, 0) self.button = Button(_('Browse...'), self.__cb_filesel) self.pack_start(self.button, False, False, 0) if file is not None: self.set_filename(file) def __cb_filesel(self, widget, data = None): "Displays a file selector when Browse is pressed" try: fsel = dialog.FileSelector(None, self.title, self.type) file = self.get_filename() if file != None: fsel.set_filename(file) self.set_filename(fsel.run()) except dialog.CancelError: pass def get_filename(self): "Gets the current filename" return io.file_normpath(self.entry.get_text()) def get_text(self): "Wrapper to emulate Entry" return self.entry.get_text() def set_filename(self, filename): "Sets the current filename" self.entry.set_text(io.file_normpath(filename)) self.entry.set_position(-1) def set_text(self, text): "Wrapper to emulate Entry" self.entry.set_text(text) GObject.type_register(FileEntry) GObject.signal_new("changed", FileEntry, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, ()) class PasswordEntry(Gtk.Entry): "An entry for editing a password (follows the 'show passwords' preference)" def __init__(self, password = None, cfg = None, clipboard = None): Gtk.Entry.__init__(self) self.set_visibility(False) if password: self.set_text(password) self.autocheck = True self.config = cfg self.clipboard = clipboard self.connect("changed", self.__cb_check_password) self.connect("populate-popup", self.__cb_popup) if cfg != None: self.config.bind('view-passwords', self, "visibility", Gio.SettingsBindFlags.DEFAULT) def __cb_check_password(self, widget, data = None): "Callback for changed, checks the password" if self.autocheck == False: return password = self.get_text() if len(password) == 0: self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, None) else: try: util.check_password(password) except ValueError as reason: self.set_password_strong(False, _('The password %s') % str(reason)) else: self.set_password_strong(True, _('The password seems good')) def __cb_popup(self, widget, menu): "Populates the popup menu" if self.clipboard != None: menuitem = ImageMenuItem(Gtk.STOCK_COPY, _('Copy password')) menuitem.connect("activate", lambda w: self.clipboard.set([self.get_text()], True)) menu.insert(menuitem, 2) menu.show_all() def set_password_strong(self, strong, reason = ""): "Sets whether the password is strong or not" self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, strong and STOCK_PASSWORD_STRONG or STOCK_PASSWORD_WEAK) self.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, reason) class PasswordEntryGenerate(HBox): "A password entry with a generator button" def __init__(self, password = None, cfg = None, clipboard = None): HBox.__init__(self) self.config = cfg self.pwentry = PasswordEntry(password, cfg, clipboard) self.pack_start(self.pwentry, True, True, 0) self.button = Button(_('Generate'), lambda w: self.generate()) self.pack_start(self.button, False, False, 0) self.entry = self.pwentry def generate(self): "Generates a password for the entry" password = util.generate_password(self.config.get_int("passwordgen-length"), self.config.get_boolean("passwordgen-punctuation")) self.pwentry.set_text(password) def get_text(self): "Wrapper for the entry" return self.pwentry.get_text() def set_text(self, text): "Wrapper for the entry" self.pwentry.set_text(text) class SpinEntry(Gtk.SpinButton): "An entry for numbers" def __init__(self, adjustment = None, climb_rate = 0.0, digits = 0): Gtk.SpinButton.__init__(self) self.configure(adjustment, climb_rate, digits) self.set_increments(1, 5) self.set_range(0, 100000) self.set_numeric(True) # BUTTONS # class Button(Gtk.Button): "A normal button" def __init__(self, label, callback = None): Gtk.Button.__init__(self, label=label) if callback is not None: self.connect("clicked", callback) class CheckButton(Gtk.CheckButton): "A checkbutton" def __init__(self, label = None): Gtk.CheckButton.__init__(self, label=label) class DropDown(Gtk.ComboBox): "A dropdown button" def __init__(self, icons = False): Gtk.ComboBox.__init__(self) self.model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_PYOBJECT) self.set_model(self.model) if icons == True: cr = Gtk.CellRendererPixbuf() cr.set_fixed_size(Gtk.icon_size_lookup(ICON_SIZE_DROPDOWN)[1] + 5, -1) self.pack_start(cr, False) self.add_attribute(cr, "icon-name", 1) cr = Gtk.CellRendererText() self.pack_start(cr, True) self.add_attribute(cr, "text", 0) self.connect("realize", self.__cb_show) def __cb_show(self, widget, data = None): "Callback for when widget is shown" if self.get_active() == -1: self.set_active(0) def append_item(self, text, stock = None, data = None): "Appends an item to the dropdown" self.model.append((text, stock, data)) def delete_item(self, index): "Removes an item from the dropdown" if self.model.iter_n_children(None) > index: iter = self.model.iter_nth_child(None, index) self.model.remove(iter) def get_active_item(self): "Returns a tuple with data for the current item" iter = self.model.iter_nth_child(None, self.get_active()) return self.model.get(iter, 0, 1, 2) def get_item(self, index): "Returns data for an item" return self.model.get(self.model.iter_nth_child(None, index), 0, 1, 2) def get_num_items(self): "Returns the number of items in the dropdown" return self.model.iter_n_children(None) def insert_item(self, index, text, stock = None, data = None): "Inserts an item in the dropdown" self.model.insert(index, (text, stock, data)) class EntryDropDown(DropDown): "An entry type dropdown" def __init__(self): DropDown.__init__(self, True) for e in entry.ENTRYLIST: if e != entry.FolderEntry: self.append_item(e().typename, e().icon, e) def get_active_type(self): "Get the currently active type" item = self.get_active_item() if item is not None: return item[2] def set_active_type(self, entrytype): "Set the active type" for i in range(self.model.iter_n_children(None)): iter = self.model.iter_nth_child(None, i) if self.model.get_value(iter, 2) == entrytype: self.set_active(i) class FileButton(Gtk.FileChooserButton): "A file chooser button" def __init__(self, title = None, file = None, type = Gtk.FileChooserAction.OPEN): Gtk.FileChooserButton.__init__(self, title) self.set_action(type) self.set_local_only(False) if file != None: self.set_filename(file) def get_filename(self): "Gets the filename" return io.file_normpath(self.get_uri()) def set_filename(self, filename): "Sets the filename" filename = io.file_normpath(filename) if filename != io.file_normpath(self.get_filename()): Gtk.FileChooserButton.set_filename(self, filename) class LinkButton(Gtk.LinkButton): "A link button" def __init__(self, url, label): Gtk.LinkButton.__init__(self, uri=url, label=label) self.set_halign(Gtk.Align.START) self.label = self.get_children()[0] "If URI is too long reduce it for the label" if len(label) > 60: self.label.set_text(label[0:59] + " (...)") def set_ellipsize(self, ellipsize): "Sets ellipsize for label" self.label.set_ellipsize(ellipsize) def set_justify(self, justify): "Sets justify for label" self.label.set_justify(justify) class RadioButton(Gtk.RadioButton): "A radio button" def __init__(self, group, label): Gtk.RadioButton.__init__(self, group, label) # MENUS AND MENU ITEMS # class ImageMenuItem(Gtk.ImageMenuItem): "A menuitem with a stock icon" def __init__(self, stock, text = None): Gtk.ImageMenuItem.__init__(self, stock) self.label = self.get_children()[0] self.image = self.get_image() if text is not None: self.set_text(text) def set_stock(self, stock): "Set the stock item to use as icon" self.image.set_from_icon_name(stock, Gtk.IconSize.MENU) def set_text(self, text): "Set the item text" self.label.set_text(text) class Menu(Gtk.Menu): "A menu" def __init__(self): Gtk.Menu.__init__(self) # MISCELLANEOUS WIDGETS # class TreeView(Gtk.TreeView): "A tree display" def __init__(self, model): Gtk.TreeView.__init__(self, model=model) self.set_headers_visible(False) self.model = model self.__cbid_drag_motion = None self.__cbid_drag_end = None self.selection = self.get_selection() self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.connect("button-press-event", self.__cb_buttonpress) self.connect("key-press-event", self.__cb_keypress) def __cb_buttonpress(self, widget, data): "Callback for handling mouse clicks" path = self.get_path_at_pos(int(data.x), int(data.y)) # handle click outside entry if path is None: self.unselect_all() # handle doubleclick if data.button == 1 and data.type == Gdk.EventType._2BUTTON_PRESS and path != None: iter = self.model.get_iter(path[0]) self.toggle_expanded(iter) if iter != None: self.emit("doubleclick", iter) # display popup on right-click elif data.button == 3: if path != None and self.selection.iter_is_selected(self.model.get_iter(path[0])) == False: self.set_cursor(path[0], path[1], False) self.emit("popup", data) return True # handle drag-and-drop of multiple rows elif self.__cbid_drag_motion is None and data.button in (1, 2) and data.type == Gdk.EventType.BUTTON_PRESS and path != None and self.selection.iter_is_selected(self.model.get_iter(path[0])) == True and len(self.get_selected()) > 1: self.__cbid_drag_motion = self.connect("motion-notify-event", self.__cb_drag_motion, data.copy()) self.__cbid_drag_end = self.connect("button-release-event", self.__cb_button_release, data.copy()) return True def __cb_button_release(self, widget, data, userdata = None): "Ends a drag" self.emit("button-press-event", userdata) self.__drag_check_end() def __cb_drag_motion(self, widget, data, userdata = None): "Monitors drag motion" if self.drag_check_threshold(int(userdata.x), int(userdata.y), int(data.x), int(data.y)) == True: self.__drag_check_end() uritarget = Gtk.TargetEntry.new("revelation/treerow", Gtk.TargetFlags.SAME_APP | Gtk.TargetFlags.SAME_WIDGET, 0) self.drag_begin_with_coordinates(Gtk.TargetList([uritarget]), Gdk.DragAction.MOVE, userdata.button.button, userdata, userdata.x, userdata.y) def __cb_keypress(self, widget, data = None): "Callback for handling key presses" # expand/collapse node on space if data.keyval == Gdk.KEY_space: self.toggle_expanded(self.get_active()) def __drag_check_end(self): "Ends a drag check" self.disconnect(self.__cbid_drag_motion) self.disconnect(self.__cbid_drag_end) self.__cbid_drag_motion = None self.__cbid_drag_end = None def collapse_row(self, iter): "Collapse a tree row" Gtk.TreeView.collapse_row(self, self.model.get_path(iter)) def expand_row(self, iter): "Expand a tree row" if iter is not None and self.model.iter_n_children(iter) > 0: Gtk.TreeView.expand_row(self, self.model.get_path(iter), False) def expand_to_iter(self, iter): "Expand all items up to and including a given iter" path = self.model.get_path(iter) for i in range(len(path)): iter = self.model.get_iter(path[0:i]) self.expand_row(iter) def get_active(self): "Get the currently active row" if self.model is None: return None iter = self.model.get_iter(self.get_cursor()[0]) if iter is None or self.selection.iter_is_selected(iter) == False: return None return iter def get_selected(self): "Get a list of currently selected rows" list = [] self.selection.selected_foreach(lambda model, path, iter: list.append(iter)) return list def select(self, iter): "Select a particular row" if iter is None: self.unselect_all() else: self.expand_to_iter(iter) self.set_cursor(self.model.get_path(iter)) def select_all(self): "Select all rows in the tree" self.selection.select_all() self.selection.emit("changed") self.emit("cursor_changed") def set_model(self, model): "Change the tree model which is being displayed" Gtk.TreeView.set_model(self, model) self.model = model def toggle_expanded(self, iter): "Toggle the expanded state of a row" if iter is None: return elif self.row_expanded(self.model.get_path(iter)): self.collapse_row(iter) else: self.expand_row(iter) def unselect_all(self): "Unselect all rows in the tree" self.selection.unselect_all() self.selection.emit("changed") self.emit("cursor_changed") self.emit("unselect_all") GObject.signal_new("doubleclick", TreeView, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, (GObject.TYPE_PYOBJECT, )) GObject.signal_new("popup", TreeView, GObject.SignalFlags.ACTION, GObject.TYPE_BOOLEAN, (GObject.TYPE_PYOBJECT, )) class EntryTree(TreeView): "An entry tree" def __init__(self, entrystore): TreeView.__init__(self, entrystore) column = Gtk.TreeViewColumn() self.append_column(column) cr = Gtk.CellRendererPixbuf() column.pack_start(cr, False) column.add_attribute(cr, "icon-name", data.COLUMN_ICON) cr.set_property("stock-size", ICON_SIZE_TREEVIEW) cr = Gtk.CellRendererText() column.pack_start(cr, True) column.add_attribute(cr, "text", data.COLUMN_NAME) self.connect("doubleclick", self.__cb_doubleclick) self.connect("row-expanded", self.__cb_row_expanded) self.connect("row-collapsed", self.__cb_row_collapsed) def __cb_doubleclick(self, widget, iter): "Stop doubleclick emission on folder" if type(self.model.get_entry(iter)) == entry.FolderEntry: self.stop_emission("doubleclick") def __cb_row_collapsed(self, object, iter, extra): "Updates folder icons when collapsed" self.model.folder_expanded(iter, False) def __cb_row_expanded(self, object, iter, extra): "Updates folder icons when expanded" # make sure all children are collapsed (some may have lingering expand icons) for i in range(self.model.iter_n_children(iter)): child = self.model.iter_nth_child(iter, i) if self.row_expanded(self.model.get_path(child)) == False: self.model.folder_expanded(child, False) self.model.folder_expanded(iter, True) def set_model(self, model): "Sets the model displayed by the tree view" TreeView.set_model(self, model) if model is None: return for i in range(model.iter_n_children(None)): model.folder_expanded(model.iter_nth_child(None, i), False) class Statusbar(Gtk.Statusbar): "An application statusbar" def __init__(self): Gtk.Statusbar.__init__(self) self.contextid = self.get_context_id("statusbar") def clear(self): "Clears the statusbar" self.pop(self.contextid) def set_status(self, text): "Displays a text in the statusbar" self.clear() self.push(self.contextid, text or "") # ACTION HANDLING # class Action(Gtk.Action): "UI Manager Action" def __init__(self, name, label = None, tooltip = None, stock = "", important = False): Gtk.Action.__init__(self, name, label, tooltip, stock) if important == True: self.set_property("is-important", True) class ActionGroup(Gtk.ActionGroup): "UI Manager Actiongroup" def add_action(self, action, accel = None): "Adds an action to the actiongroup" if accel is None: Gtk.ActionGroup.add_action(self, action) else: self.add_action_with_accel(action, accel) class ToggleAction(Gtk.ToggleAction): "A toggle action item" def __init__(self, name, label, tooltip = None, stock = None): Gtk.ToggleAction.__init__(self, name, label, tooltip, stock) class UIManager(Gtk.UIManager): "UI item manager" def __init__(self): Gtk.UIManager.__init__(self) self.connect("connect-proxy", self.__cb_connect_proxy) def __cb_connect_proxy(self, uimanager, action, widget): "Callback for connecting proxies to an action" if type(widget) in (Gtk.MenuItem, Gtk.ImageMenuItem, Gtk.CheckMenuItem): widget.tooltip = action.get_property("tooltip") else: widget.set_property("label", widget.get_property("label").replace("...", "")) def add_ui_from_file(self, file): "Loads ui from a file" try: Gtk.UIManager.add_ui_from_file(self, file) except GObject.GError: raise IOError def append_action_group(self, actiongroup): "Appends an action group" Gtk.UIManager.insert_action_group(self, actiongroup, len(self.get_action_groups())) def get_action(self, name): "Looks up an action in the managers actiongroups" for actiongroup in self.get_action_groups(): action = actiongroup.get_action(name) if action is not None: return action def get_action_group(self, name): "Returns the named action group" for actiongroup in self.get_action_groups(): if actiongroup.get_name() == name: return actiongroup # APPLICATION COMPONENTS # class AppWindow(Gtk.ApplicationWindow): "An application window" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class App(Gtk.Application): "An application" def __init__(self, appname): Gtk.Application.__init__(self, application_id='info.olasagasti.revelation') self.toolbars = {} def __connect_menu_statusbar(self, menu): "Connects a menus items to the statusbar" for item in menu.get_children(): if isinstance(item, Gtk.MenuItem) == True: item.connect("select", self.cb_menudesc, True) item.connect("deselect", self.cb_menudesc, False) def cb_menudesc(self, item, show): "Displays menu descriptions in the statusbar" if show == True: self.statusbar.set_status(item.get_label()) else: self.statusbar.clear() def __cb_toolbar_hide(self, widget, name): "Hides the toolbar dock when the toolbar is hidden" if name in self.toolbars: self.toolbars[name].hide() def __cb_toolbar_show(self, widget, name): "Shows the toolbar dock when the toolbar is shown" if name in self.toolbars: self.toolbars[name].show() def add_toolbar(self, toolbar, name, band): "Adds a toolbar" self.toolbars[name] = toolbar self.main_vbox.pack_start(toolbar, False, True, 0) toolbar.connect("show", self.__cb_toolbar_show, name) toolbar.connect("hide", self.__cb_toolbar_hide, name) toolbar.show_all() def get_title(self): "Returns the app title" title = Gtk.Window.get_title(self.window) return title.replace(" - " + config.APPNAME, "") def popup(self, menu, button, time): "Displays a popup menu" # get Gtk.Menu gmenu = Gtk.Menu.new_from_model(menu) gmenu.attach_to_widget(self.window, None) # transfer the tooltips from Gio.Menu to Gtk.Menu menu_item_index = 0 menu_items = gmenu.get_children() for sect in range(menu.get_n_items()): for item in range(menu.get_item_link(sect, 'section').get_n_items()): tooltip_text = menu.get_item_link(sect, 'section').get_item_attribute_value(item, 'tooltip', None) if tooltip_text: tooltip_text = tooltip_text.unpack() menu_items[menu_item_index].set_tooltip_text(tooltip_text) menu_item_index += 1 # skip section separator menu_item_index += 1 self.__connect_menu_statusbar(gmenu) gmenu.popup_at_pointer() def set_menus(self, menubar): "Sets the menubar for the application" for item in menubar.get_children(): self.__connect_menu_statusbar(item.get_submenu()) self.main_vbox.pack_start(menubar, False, True, 0) def set_title(self, title): "Sets the window title" Gtk.Window.set_title(self.window, title + " - " + config.APPNAME) def set_toolbar(self, toolbar): "Sets the application toolbar" self.main_vbox.pack_start(toolbar, False, True, 0) toolbar.connect("show", self.__cb_toolbar_show, "Toolbar") toolbar.connect("hide", self.__cb_toolbar_hide, "Toolbar") def set_contents(self, widget): self.main_vbox.pack_start(widget, True, True, 0) class EntryView(VBox): "A component for displaying an entry" def __init__(self, cfg = None, clipboard = None): VBox.__init__(self) self.set_spacing(12) self.set_border_width(12) self.config = cfg self.clipboard = clipboard self.entry = None def clear(self, force = False): "Clears the data view" self.entry = None for child in self.get_children(): child.destroy() def display_entry(self, e): "Displays info about an entry" self.clear() self.entry = e if self.entry is None: return # set up metadata display metabox = VBox() self.pack_start(metabox) label = ImageLabel( "%s" % util.escape_markup(e.name), e.icon, ICON_SIZE_DATAVIEW ) label.set_halign(Gtk.Align.CENTER) label.set_valign(Gtk.Align.CENTER) metabox.pack_start(label, True, True, 0) label = Label("%s%s" % (e.typename + (e.description != "" and ": " or ""), util.escape_markup(e.description)), Gtk.Justification.CENTER) metabox.pack_start(label, True, True, 0) # set up field list fields = [field for field in e.fields if field.value != ""] if len(fields) > 0: table = Gtk.Grid() self.pack_start(table) table.set_column_spacing(10) table.set_row_spacing(5) for rowindex, field in zip(range(len(fields)), fields): label = Label("%s: " % util.escape_markup(field.name)) label.set_hexpand(True) table.attach(label, 0, rowindex, 1, 1) widget = generate_field_display_widget(field, self.config, self.clipboard) widget.set_hexpand(True) table.attach(widget, 1, rowindex, 1, 1) # notes label = Label("%s%s" % ((e.notes != "" and _("Notes: ") or ""), util.escape_markup(e.notes)), Gtk.Justification.LEFT) self.pack_start(label) # display updatetime if type(e) != entry.FolderEntry: label = Label((_('Updated %s ago') + "\n%s") % (util.time_period_rough(e.updated, time.time()), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(e.updated))), Gtk.Justification.CENTER) self.pack_start(label) self.show_all() def pack_start(self, widget): "Adds a widget to the data view" widget.set_halign(Gtk.Align.CENTER) widget.set_valign(Gtk.Align.CENTER) VBox.pack_start(self, widget, False, False, 0) class Searchbar(Toolbar): "A toolbar for easy searching" def __init__(self): Toolbar.__init__(self) self.entry = Gtk.SearchEntry() self.entry.set_tooltip_text(_('Text to search for')) self.dropdown = EntryDropDown() self.dropdown.insert_item(0, _('Any type'), "help-about") box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0) Gtk.StyleContext.add_class(box.get_style_context(), "linked") self.button_prev = Gtk.Button.new_from_icon_name(STOCK_PREVIOUS, Gtk.IconSize.BUTTON) self.button_prev.set_tooltip_text(_('Find the previous match')) self.button_next = Gtk.Button.new_from_icon_name(STOCK_NEXT, Gtk.IconSize.BUTTON) self.button_next.set_tooltip_text(_('Find the next match')) box.add(self.entry) box.add(self.button_prev) box.add(self.button_next) box.add(self.dropdown) self.append_widget(box) self.connect("show", self.__cb_show) self.entry.connect("changed", self.__cb_entry_changed) self.entry.connect("key-press-event", self.__cb_key_press) self.button_next.set_sensitive(False) self.button_prev.set_sensitive(False) def __cb_entry_changed(self, widget, data = None): "Callback for entry changes" s = self.entry.get_text() != "" self.button_next.set_sensitive(s) self.button_prev.set_sensitive(s) def __cb_key_press(self, widget, data = None): "Callback for key presses" # return if data.keyval == Gdk.KEY_Return and widget.get_text() != "": if (data.state & Gdk.ModifierType.SHIFT_MASK) == Gdk.ModifierType.SHIFT_MASK: self.button_prev.activate() else: self.button_next.activate() return True def __cb_show(self, widget, data = None): "Callback for widget display" self.entry.select_region(0, -1) self.entry.grab_focus() revelation-revelation-0.5.5/src/lib/util.py000066400000000000000000000216751423125252400207360ustar00rootroot00000000000000# # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Module with various utility functions # # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # import datetime import gettext import math import os import pwquality import random import secrets import shlex import string import traceback from io import StringIO _ = gettext.gettext class SubstFormatError(Exception): "Exception for parse_subst format errors" pass class SubstValueError(Exception): "Exception for missing values in parse_subst" pass def check_password(password): "Checks if a password is valid" # check for length if len(password) < 6: raise ValueError(_('is too short')) # check for entropy pwlen = len(password) ent = entropy(password) idealent = entropy_ideal(pwlen) if (pwlen < 100 and ent / idealent < 0.8) or (pwlen >= 100 and ent < 5.3): raise ValueError(_('isn\'t varied enough')) # check the password strength lc, uc, d, o = 0, 0, 0, 0 for c in password: if c in string.ascii_lowercase: lc += 1 elif c in string.ascii_uppercase: uc += 1 elif c in string.digits: d += 1 else: o += 1 classcount = [lc, uc, d, o] classcount.sort() classcount.reverse() cred = sum([count * (1 + (weight ** 2.161 / 10)) for weight, count in zip(range(1, len(classcount) + 1), classcount)]) if cred < 10: raise ValueError(_('is too weak')) # check if the password is a palindrome for i in range(len(password)): if password[i] != password[-i - 1]: break else: raise ValueError(_('is a palindrome')) # check password with pwquality try: if len(password) < 100: pwquality.PWQSettings().check(password) except (ValueError, pwquality.PWQError) as reason: # modify reason if isinstance(reason, pwquality.PWQError): reason = reason.args[1].replace("The password ", "") reason = str(reason).strip() reason = reason.replace("simplistic/systematic", "systematic") reason = reason.replace(" dictionary", "") if reason[:3] == "it ": reason = reason[3:] if reason[:5] == "it's ": reason = "is " + reason[5:] raise ValueError(reason) except IOError: pass def dom_text(node): "Returns text content of a DOM node" text = "" for child in node.childNodes: if child.nodeType == node.TEXT_NODE: text += child.nodeValue return text def entropy(string): "Calculates the Shannon entropy of a string" # get probability of chars in string prob = [float(string.count(c)) / len(string) for c in dict.fromkeys(list(string))] # calculate the entropy entropy = - sum([p * math.log(p) / math.log(2.0) for p in prob]) return entropy def entropy_ideal(length): "Calculates the ideal Shannon entropy of a string with given length" prob = 1.0 / length return -1.0 * length * prob * math.log(prob) / math.log(2.0) def escape_markup(string): "Escapes a string so it can be placed in a markup string" if string is None: return "" string = string.replace("&", "&") string = string.replace("<", "<") string = string.replace(">", ">") return string def execute_child(command): "Runs a command as a child, returns its process ID" items = shlex.split(command) return os.spawnvp(os.P_NOWAIT, items[0], items) # nosec def generate_password(length, punctuation): "Generates a password" # set up character sets d = string.digits.translate(str.maketrans("", "", "015")) lc = string.ascii_lowercase.translate(str.maketrans("", "", "lqg")) uc = string.ascii_uppercase.translate(str.maketrans("", "", "IOS")) fullset = d + uc + lc if punctuation: p = string.punctuation fullset = fullset + p charsets = ( (d, 0.15), (uc, 0.24), (lc, 0.24), (p, 0.15), ) else: charsets = ( (d, 0.15), (uc, 0.24), (lc, 0.24), ) # function for generating password def genpw(length): password = [] for set, share in charsets: password.extend([secrets.choice(set) for i in range(int(round(length * share)))]) while len(password) < length: password.append(secrets.choice(fullset)) random.shuffle(password) return "".join(password) # check password, and regenerate if needed while True: try: password = genpw(length) if length <= 6: return password check_password(password) return password except ValueError: continue def pad_right(string, length, padchar = " "): "Right-pads a string to a given length" if string is None: return None if len(string) >= length: return string return string + ((length - len(string)) * padchar) def parse_subst(string, map): "Parses a string for substitution variables" result = "" pos = 0 while pos < len(string): char = string[pos] next = pos + 1 < len(string) and string[pos + 1] or "" # handle normal characters if char != "%": result += char pos += 1 # handle % escapes (%%) elif next == "%": result += "%" pos += 2 # handle optional substitution variables elif next == "?": if string[pos + 2] in map: result += map[string[pos + 2]] pos += 3 else: raise SubstFormatError # handle optional substring expansions elif next == "(": try: result += parse_subst(string[pos + 2:string.index("%)", pos + 1)], map) except ValueError: raise SubstFormatError except SubstValueError: pass pos = string.index("%)", pos + 1) + 2 # handle required ("normal") substitution variables elif next in map: if not map[next]: raise SubstValueError result += map[next] pos += 2 # otherwise, it's a format error else: raise SubstFormatError return result def time_period_rough(start, end): "Returns the rough period from start to end in human-readable format" if end < start: return _('%i seconds') % 0 start = datetime.datetime.utcfromtimestamp(float(start)) end = datetime.datetime.utcfromtimestamp(float(end)) delta = end - start if delta.days >= 365: period = delta.days / 365 unit = period != 1 and _('years') or _('year') elif delta.days >= 31 or (end.month != start.month and (end.day > start.day or (end.day == start.day and end.time() >= start.time()))): period = ((end.year - start.year) * 12) + end.month - start.month if end.day < start.day or (end.day == start.day and end.time() < start.time()): period -= 1 unit = period != 1 and _('months') or _('month') elif delta.days >= 7: period = delta.days / 7 unit = period != 1 and _('weeks') or _('week') elif delta.days >= 1: period = delta.days unit = period != 1 and _('days') or _('day') elif delta.seconds >= 3600: period = delta.seconds / 3600 unit = period != 1 and _('hours') or _('hour') elif delta.seconds >= 60: period = delta.seconds / 60 unit = period != 1 and _('minutes') or _('minute') else: period = delta.seconds unit = period != 1 and _('seconds') or _('second') return "%d %s" % (period, unit) def trace_exception(type, value, tb): "Returns an exception traceback as a string" trace = StringIO() traceback.print_exception(type, value, tb, None, trace) return trace.getvalue() def unescape_markup(string): "Unescapes a string to get literal values" string = string.replace("&", "&") string = string.replace("<", "<") string = string.replace(">", ">") return string revelation-revelation-0.5.5/src/meson.build000066400000000000000000000014511423125252400207710ustar00rootroot00000000000000install_data( 'revelation.py', rename: 'revelation', install_mode: 'rwxr-xr-x', install_dir: bindir, ) install_subdir( 'lib', install_dir: libdir, strip_directory: true, exclude_files: ['Makefile.am', 'Makefile.in', 'datahandler/Makefile.am', 'datahandler/Makefile.in', 'config.py.in'] ) install_subdir( 'bundle', install_dir: libdir, strip_directory: false, exclude_files: ['Makefile.am', 'Makefile.in'] ) config_conf = configuration_data() config_conf.set('pkgdatadir', rvl_pkgdatadir) config_conf.set('datadir', rvl_datadir) config_conf.set('PACKAGE', rvl_name) config_conf.set('VERSION', rvl_version) configure_file( input: 'lib/config.py.in', output: 'config.py', install: true, install_dir: libdir, configuration: config_conf, ) revelation-revelation-0.5.5/src/revelation.py000066400000000000000000002255751423125252400213700ustar00rootroot00000000000000#!/usr/bin/python3 # # Revelation - a password manager for GNOME 2 # http://oss.codepoet.no/revelation/ # $Id$ # # Copyright (c) 2003-2006 Erik Grinaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # import gettext import locale import os import pwd import sys import urllib.parse import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk, Gio, GLib # noqa: E402 from revelation import config, data, datahandler, dialog, entry, io, ui, util # noqa: E402 _ = gettext.gettext class Revelation(ui.App): "The Revelation application" def __init__(self): sys.excepthook = self.__cb_exception os.umask(0o077) gettext.bindtextdomain(config.PACKAGE, config.DIR_LOCALE) gettext.textdomain(config.PACKAGE) # Gtk.Builder uses the C lib's locale API, accessible with the locale module locale.bindtextdomain(config.PACKAGE, config.DIR_LOCALE) locale.bind_textdomain_codeset(config.PACKAGE, "UTF-8") ui.App.__init__(self, config.APPNAME) self.window = None resource_path = os.path.join(config.DIR_UI, 'revelation.gresource') resource = Gio.Resource.load(resource_path) resource._register() def do_startup(self): Gtk.Application.do_startup(self) if not self.window: self.window = ui.AppWindow(application=self, title="Revelation") self.main_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 5) self.window.add(self.main_vbox) self.add_window(self.window) def do_activate(self): self.builder = Gtk.Builder() self.builder.add_from_resource('/info/olasagasti/revelation/ui/menubar.ui') self.menubar = self.builder.get_object("menubar") self.popupbuilder = Gtk.Builder() self.popupbuilder.add_from_resource('/info/olasagasti/revelation/ui/popup-tree.ui') self.popupmenu = self.popupbuilder.get_object("popup-tree") self.window.connect("delete-event", self.__cb_quit) try: self.__init_config() self.__init_actions() self.__init_facilities() self.__init_ui() self.__init_states() self.__init_dbus() except IOError: dialog.Error(self.window, _('Missing data files'), _('Some of Revelations system files could not be found, please reinstall Revelation.')).run() sys.exit(1) except config.ConfigError: dialog.Error(self.window, _('Missing configuration data'), _('Revelation could not find its configuration data, please reinstall Revelation.')).run() sys.exit(1) except ui.DataError: dialog.Error(self.window, _('Invalid data files'), _('Some of Revelations system files contain invalid data, please reinstall Revelation.')).run() sys.exit(1) if len(sys.argv) > 1: file = sys.argv[1] elif self.config.get_boolean("file-autoload") == True: file = self.config.get_string("file-autoload-file") else: file = "" if file != "": self.file_open(io.file_normpath(urllib.parse.unquote(file))) def __init_config(self): "Get configuration schema" schema_source = Gio.SettingsSchemaSource.get_default() rvl_schema = schema_source.lookup('org.revelation', recursive=True) if not rvl_schema: schema_source = Gio.SettingsSchemaSource.new_from_directory(config.DIR_GSCHEMAS, schema_source, False) rvl_schema = schema_source.lookup('org.revelation', recursive=True) if not rvl_schema: raise config.ConfigError rvl_settings = Gio.Settings.new_full(rvl_schema, None, None) self.config = rvl_settings def __init_actions(self): "Sets up actions" # set up placeholders group = Gio.SimpleActionGroup() self.window.insert_action_group("placeholder", group) action_menu_edit = Gio.SimpleAction.new("menu-edit", None) action_menu_entry = Gio.SimpleAction.new("menu-entry", None) action_menu_file = Gio.SimpleAction.new("menu-file", None) action_menu_help = Gio.SimpleAction.new("menu-help", None) action_menu_view = Gio.SimpleAction.new("menu-view", None) action_popup_tree = Gio.SimpleAction.new("popup-tree", None) group.add_action(action_menu_edit) group.add_action(action_menu_entry) group.add_action(action_menu_file) group.add_action(action_menu_help) group.add_action(action_menu_view) group.add_action(action_popup_tree) # set up dynamic actions group = Gio.SimpleActionGroup() self.window.insert_action_group("dynamic", group) action = Gio.SimpleAction.new("clip-paste", None) action.connect("activate", self.__cb_clip_paste) group.add_action(action) action = Gio.SimpleAction.new("entry-goto", None) action.connect("activate", lambda w, k: self.entry_goto(self.tree.get_selected())) group.add_action(action) action = Gio.SimpleAction.new("redo", None) action.connect("activate", lambda w, k: self.redo()) group.add_action(action) action = Gio.SimpleAction.new("undo", None) action.connect("activate", lambda w, k: self.undo()) group.add_action(action) # set up group for multiple entries group = Gio.SimpleActionGroup() self.window.insert_action_group("entry-multiple", group) action = Gio.SimpleAction.new("clip-copy", None) action.connect("activate", self.__cb_clip_copy) group.add_action(action) action = Gio.SimpleAction.new("clip-chain", None) action.connect("activate", lambda w, k: self.clip_chain(self.entrystore.get_entry(self.tree.get_active()))) group.add_action(action) action = Gio.SimpleAction.new("clip-cut", None) action.connect("activate", self.__cb_clip_cut) group.add_action(action) action = Gio.SimpleAction.new("entry-remove", None) action.connect("activate", lambda w, k: self.entry_remove(self.tree.get_selected())) group.add_action(action) # action group for "optional" entries group = Gio.SimpleActionGroup() self.window.insert_action_group("entry-optional", group) action = Gio.SimpleAction.new("entry-add", None) action.connect("activate", lambda w, k: self.entry_add(None, self.tree.get_active())) group.add_action(action) action = Gio.SimpleAction.new("entry-folder", None) action.connect("activate", lambda w, k: self.entry_folder(None, self.tree.get_active())) group.add_action(action) # action group for single entries group = Gio.SimpleActionGroup() self.window.insert_action_group("entry-single", group) action = Gio.SimpleAction.new("entry-edit", None) action.connect("activate", lambda w, k: self.entry_edit(self.tree.get_active())) group.add_action(action) # action group for existing file group = Gio.SimpleActionGroup() self.window.insert_action_group("file-exists", group) action = Gio.SimpleAction.new("file-lock", None) action.connect("activate", lambda w, k: self.file_lock()) group.add_action(action) # action group for searching group = Gio.SimpleActionGroup() self.window.insert_action_group("find", group) action = Gio.SimpleAction.new("find-next", None) action.connect("activate", lambda w, k: self.__entry_find(self, self.searchbar.entry.get_text(), self.searchbar.dropdown.get_active_type(), data.SEARCH_NEXT)) group.add_action(action) action = Gio.SimpleAction.new("find-previous", None) action.connect("activate", lambda w, k: self.__entry_find(self, self.searchbar.entry.get_text(), self.searchbar.dropdown.get_active_type(), data.SEARCH_PREVIOUS)) group.add_action(action) # global action group group = Gio.SimpleActionGroup() self.window.insert_action_group("file", group) action = Gio.SimpleAction.new("file-change-password", None) action.connect("activate", lambda w, k: self.file_change_password()) group.add_action(action) action = Gio.SimpleAction.new("file-close", None) action.connect("activate", self.__cb_close) group.add_action(action) action = Gio.SimpleAction.new("file-export", None) action.connect("activate", lambda w, k: self.file_export()) group.add_action(action) action = Gio.SimpleAction.new("file-import", None) action.connect("activate", lambda w, k: self.file_import()) group.add_action(action) action = Gio.SimpleAction.new("file-new", None) action.connect("activate", lambda w, k: self.file_new()) group.add_action(action) action = Gio.SimpleAction.new("file-open", None) action.connect("activate", lambda w, k: self.file_open()) group.add_action(action) action = Gio.SimpleAction.new("file-save", None) action.connect("activate", lambda w, k: self.file_save(self.datafile.get_file(), self.datafile.get_password())) group.add_action(action) action = Gio.SimpleAction.new("file-save-as", None) action.connect("activate", lambda w, k: self.file_save(None, None)) group.add_action(action) action = Gio.SimpleAction.new("find", None) action.connect("activate", lambda w, k: self.entry_find()) group.add_action(action) action = Gio.SimpleAction.new("help-about", None) action.connect("activate", lambda w, k: self.about()) group.add_action(action) action = Gio.SimpleAction.new("prefs", None) action.connect("activate", lambda w, k: self.prefs()) group.add_action(action) action = Gio.SimpleAction.new("pwchecker", None) action.connect("activate", lambda w, k: self.pwcheck()) group.add_action(action) action = Gio.SimpleAction.new("pwgenerator", None) action.connect("activate", lambda w, k: self.pwgen()) group.add_action(action) action = Gio.SimpleAction.new("quit", None) action.connect("activate", self.__cb_quit) group.add_action(action) action = Gio.SimpleAction.new("select-all", None) action.connect("activate", lambda w, k: self.tree.select_all()) group.add_action(action) action = Gio.SimpleAction.new("select-none", None) action.connect("activate", lambda w, k: self.tree.unselect_all()) group.add_action(action) action_vp = Gio.SimpleAction.new_stateful("view-passwords", None, GLib.Variant.new_boolean(self.config.get_boolean("view-passwords"))) action_vp.connect("activate", lambda w, k: action_vp.set_state(GLib.Variant.new_boolean(not action_vp.get_state()))) action_vp.connect("activate", lambda w, k: self.config.set_boolean("view-passwords", action_vp.get_state())) self.config.connect("changed::view-passwords", lambda w, k: action_vp.set_state(GLib.Variant.new_boolean(w.get_boolean(k)))) group.add_action(action_vp) action_vs = Gio.SimpleAction.new_stateful("view-searchbar", None, GLib.Variant.new_boolean(True)) action_vs.connect("activate", lambda w, k: action_vs.set_state(GLib.Variant.new_boolean(not action_vs.get_state()))) action_vs.connect("activate", lambda w, k: self.config.set_boolean("view-searchbar", action_vs.get_state())) action_vs.connect("activate", lambda w, k: self.searchbar.set_visible(GLib.Variant.new_boolean(action_vs.get_state()))) self.config.connect("changed::view-searchbar", lambda w, k: action_vs.set_state(GLib.Variant.new_boolean(w.get_boolean(k)))) self.config.connect("changed::view-searchbar", lambda w, k: self.searchbar.set_visible(GLib.Variant.new_boolean(w.get_boolean(k)))) group.add_action(action_vs) action_va = Gio.SimpleAction.new_stateful("view-statusbar", None, GLib.Variant.new_boolean(True)) action_va.connect("activate", lambda w, k: action_va.set_state(GLib.Variant.new_boolean(not action_va.get_state()))) action_va.connect("activate", lambda w, k: self.config.set_boolean("view-statusbar", action_va.get_state())) action_va.connect("activate", lambda w, k: self.statusbar.set_visible(GLib.Variant.new_boolean(action_va.get_state()))) self.config.connect("changed::view-statusbar", lambda w, k: action_va.set_state(GLib.Variant.new_boolean(w.get_boolean(k)))) self.config.connect("changed::view-statusbar", lambda w, k: self.statusbar.set_visible(GLib.Variant.new_boolean(w.get_boolean(k)))) group.add_action(action_va) action_vt = Gio.SimpleAction.new_stateful("view-toolbar", None, GLib.Variant.new_boolean(True)) action_vt.connect("activate", lambda w, k: action_vt.set_state(GLib.Variant.new_boolean(not action_vt.get_state()))) action_vt.connect("activate", lambda w, k: self.config.set_boolean("view-toolbar", action_vt.get_state())) action_vt.connect("activate", lambda w, k: self.toolbar.set_visible(GLib.Variant.new_boolean(action_vt.get_state()))) self.config.connect("changed::view-toolbar", lambda w, k: action_vt.set_state(GLib.Variant.new_boolean(w.get_boolean(k)))) self.config.connect("changed::view-toolbar", lambda w, k: self.toolbar.set_visible(GLib.Variant.new_boolean(w.get_boolean(k)))) self.config.connect("changed::view-toolbar-style", lambda w, k: self.__cb_config_toolbar_style(w, w.get_string(k))) group.add_action(action_vt) def __init_facilities(self): "Sets up various facilities" self.clipboard = data.Clipboard() self.datafile = io.DataFile(datahandler.Revelation2) self.entryclipboard = data.EntryClipboard() self.entrystore = data.EntryStore() self.entrysearch = data.EntrySearch(self.entrystore) self.items = Gtk.IconTheme.get_default() self.locktimer = data.Timer() self.undoqueue = data.UndoQueue() self.datafile.connect("changed", lambda w, f: self.__state_file(f)) self.datafile.connect("content-changed", self.__cb_file_content_changed) self.entryclipboard.connect("content-toggled", lambda w, d: self.__state_clipboard(d)) self.locktimer.connect("ring", self.__cb_file_autolock) self.undoqueue.connect("changed", lambda w: self.__state_undo(self.undoqueue.get_undo_action(), self.undoqueue.get_redo_action())) self.config.connect("changed::file-autolock-timeout", lambda w, k: self.locktimer.start(60 * w.get_int(k))) if self.config.get_boolean("file-autolock"): self.locktimer.start(60 * self.config.get_int("file-autolock-timeout")) dialog.EVENT_FILTER = self.__cb_event_filter def __init_states(self): "Sets the initial application state" # set window states self.window.set_default_size( self.config.get_int("view-window-width"), self.config.get_int("view-window-height") ) self.window.move( self.config.get_int("view-window-position-x"), self.config.get_int("view-window-position-y") ) self.hpaned.set_position( self.config.get_int("view-pane-position") ) # bind ui widgets to config keys bind = { "view-passwords": "/menubar/menu-view/view-passwords", "view-searchbar": "/menubar/menu-view/view-searchbar", "view-statusbar": "/menubar/menu-view/view-statusbar", "view-toolbar": "/menubar/menu-view/view-toolbar" } for key in bind.keys(): self.window.get_action_group("file").lookup_action(key).set_state(self.config.get_value(key)) self.window.show_all() # use some events to restart lock timer Gdk.event_handler_set(self.__cb_event_filter) self.file_locked = False # set some variables self.entrysearch.string = '' self.entrysearch.type = None # set ui widget states self.__state_clipboard(self.entryclipboard.has_contents()) self.__state_entry([]) self.__state_file(None) self.__state_find(self.searchbar.entry.get_text()) self.__state_undo(None, None) # set states from config self.searchbar.set_visible(self.config.get_boolean("view-searchbar")) self.statusbar.set_visible(self.config.get_boolean("view-statusbar")) self.toolbar.set_visible(self.config.get_boolean("view-toolbar")) self.__cb_config_toolbar_style(self.config, self.config.get_string("view-toolbar-style")) # give focus to searchbar entry if shown if self.searchbar.get_property("visible") == True: self.searchbar.entry.grab_focus() def __init_ui(self): "Sets up the UI" # add custom icons path _icon_theme = Gtk.IconTheme.get_default() if _icon_theme is not None: _icon_theme.append_search_path(config.DIR_ICONS) # set window icons pixbufs = [self.items.load_icon("info.olasagasti.revelation", size, 0) for size in (128, 48, 32, 24, 16)] pixbufs = [pixbuf for pixbuf in pixbufs if pixbuf != None] if len(pixbufs) > 0: Gtk.Window.set_default_icon_list(pixbufs) # set up toolbar and menus self.set_menubar(self.menubar) toolbar = Gtk.Toolbar.new() toolbar.set_style(Gtk.ToolbarStyle.BOTH_HORIZ) open_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('document-open', Gtk.IconSize.LARGE_TOOLBAR), _('_Open')) open_item.connect('clicked', lambda k: self.window.get_action_group("file").lookup_action("file-open").activate()) open_item.set_tooltip_text(_('Open a file')) open_item.set_use_underline(True) toolbar.insert(open_item, -1) save_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('document-save', Gtk.IconSize.LARGE_TOOLBAR), _('_Save')) save_item.connect('clicked', lambda k: self.window.get_action_group("file").lookup_action("file-save").activate()) save_item.set_tooltip_text(_('Save data to a file')) save_item.set_property('is-important', True) save_item.set_use_underline(True) toolbar.insert(save_item, -1) toolbar.insert(Gtk.SeparatorToolItem.new(), -1) addentry_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('list-add', Gtk.IconSize.LARGE_TOOLBAR), _('Add Entry')) addentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-optional").lookup_action("entry-add").activate()) addentry_item.set_tooltip_text(_('Create a new entry')) addentry_item.set_property('is-important', True) addentry_item.set_use_underline(True) toolbar.insert(addentry_item, -1) addfolder_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('folder-new', Gtk.IconSize.LARGE_TOOLBAR), _('Add folder')) addfolder_item.connect('clicked', lambda k: self.window.get_action_group("entry-optional").lookup_action("entry-folder").activate()) addfolder_item.set_tooltip_text(_('Create a new folder')) toolbar.insert(addfolder_item, -1) toolbar.insert(Gtk.SeparatorToolItem.new(), -1) gotoentry_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('go-jump', Gtk.IconSize.LARGE_TOOLBAR), _('_Go to')) gotoentry_item.connect('clicked', lambda k: self.window.get_action_group("dynamic").lookup_action("entry-goto").activate()) gotoentry_item.set_tooltip_text(_('Go to the selected entries')) gotoentry_item.set_property('is-important', True) gotoentry_item.set_use_underline(True) toolbar.insert(gotoentry_item, -1) editentry_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('document-edit', Gtk.IconSize.LARGE_TOOLBAR), _('_Edit')) editentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-single").lookup_action("entry-edit").activate()) editentry_item.set_tooltip_text(_('Edit the selected entry')) editentry_item.set_use_underline(True) toolbar.insert(editentry_item, -1) removeentry_item = Gtk.ToolButton.new(Gtk.Image.new_from_icon_name('edit-delete', Gtk.IconSize.LARGE_TOOLBAR), _('Re_move')) removeentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-multiple").lookup_action("entry-remove").activate()) removeentry_item.set_tooltip_text(_('Remove the selected entries')) removeentry_item.set_use_underline(True) toolbar.insert(removeentry_item, -1) self.toolbar = toolbar self.toolbar.connect("popup-context-menu", lambda w, x, y, b: True) self.add_toolbar(toolbar, "toolbar", 1) self.statusbar = ui.Statusbar() self.main_vbox.pack_end(self.statusbar, False, True, 0) self.searchbar = ui.Searchbar() self.add_toolbar(self.searchbar, "searchbar", 2) # set up main application widgets self.tree = ui.EntryTree(self.entrystore) self.scrolledwindow = ui.ScrolledWindow(self.tree) self.entryview = ui.EntryView(self.config, self.clipboard) self.entryview.set_halign(Gtk.Align.CENTER) self.entryview.set_valign(Gtk.Align.CENTER) self.entryview.set_hexpand(True) self.hpaned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL) self.hpaned.pack1(self.scrolledwindow, True, True) self.hpaned.pack2(self.entryview, True, True) self.hpaned.set_border_width(6) self.set_contents(self.hpaned) # set up drag-and-drop uritarget = Gtk.TargetEntry.new("text/uri-list", 0, 0) self.window.drag_dest_set(Gtk.DestDefaults.ALL, [uritarget], Gdk.DragAction.COPY | Gdk.DragAction.MOVE | Gdk.DragAction.LINK) self.window.connect("drag_data_received", self.__cb_drag_dest) self.tree.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, (("revelation/treerow", Gtk.TargetFlags.SAME_APP | Gtk.TargetFlags.SAME_WIDGET, 0), ), Gdk.DragAction.MOVE) self.tree.enable_model_drag_dest((("revelation/treerow", Gtk.TargetFlags.SAME_APP | Gtk.TargetFlags.SAME_WIDGET, 0), ), Gdk.DragAction.MOVE) self.tree.connect("drag_data_received", self.__cb_tree_drag_received) # set up callbacks self.searchbar.entry.connect("key-press-event", self.__cb_searchbar_key_press) self.searchbar.button_next.connect("clicked", self.__cb_searchbar_button_clicked, data.SEARCH_NEXT) self.searchbar.button_prev.connect("clicked", self.__cb_searchbar_button_clicked, data.SEARCH_PREVIOUS) self.searchbar.entry.connect("changed", lambda w: self.__state_find(self.searchbar.entry.get_text())) self.tree.connect("popup", lambda w, d: self.popup(self.popupmenu, d.button, d.time)) self.tree.connect("doubleclick", self.__cb_tree_doubleclick) self.tree.connect("key-press-event", self.__cb_tree_keypress) self.tree.selection.connect("changed", lambda w: self.entryview.display_entry(self.entrystore.get_entry(self.tree.get_active()))) self.tree.selection.connect("changed", lambda w: self.__state_entry(self.tree.get_selected())) def __init_dbus(self): app = Gio.Application.get_default self.dbus_subscription_id = app().get_dbus_connection().signal_subscribe(None, "org.gnome.ScreenSaver", "ActiveChanged", "/org/gnome/ScreenSaver", None, Gio.DBusSignalFlags.NONE, self.__cb_screensaver_lock) # STATE HANDLERS # def __save_state(self): "Saves the current application state" width, height = self.window.get_size() self.config.set_int("view-window-width", width) self.config.set_int("view-window-height", height) x, y = self.window.get_position() self.config.set_int("view-window-position-x", x) self.config.set_int("view-window-position-y", y) self.config.set_int("view-pane-position", self.hpaned.get_position()) self.config.sync() def __state_clipboard(self, has_contents): "Sets states based on the clipboard contents" self.window.get_action_group("dynamic").lookup_action("clip-paste").set_enabled(has_contents) def __state_entry(self, iters): "Sets states for entry-dependant ui items" # widget sensitivity based on number of entries for action in self.window.get_action_group("entry-multiple").list_actions(): self.window.get_action_group("entry-multiple").lookup_action(action).set_enabled(len(iters) > 0) for action in self.window.get_action_group("entry-single").list_actions(): self.window.get_action_group("entry-single").lookup_action(action).set_enabled(len(iters) == 1) for action in self.window.get_action_group("entry-optional").list_actions(): self.window.get_action_group("entry-optional").lookup_action(action).set_enabled(len(iters) < 2) # copy password sensitivity s = False for iter in iters: e = self.entrystore.get_entry(iter) for f in e.fields: if f.datatype == entry.DATATYPE_PASSWORD and f.value != "": s = True self.window.get_action_group("entry-multiple").lookup_action("clip-chain").set_enabled(s) # goto sensitivity try: for iter in iters: e = self.entrystore.get_entry(iter) if (e.id == "folder"): continue if self.config.get_string("launcher-%s" % e.id) not in ("", None): s = True break else: s = False except config.ConfigError: s = False self.window.get_action_group("dynamic").lookup_action("entry-goto").set_enabled(s) def __state_file(self, file): "Sets states based on file" for action in self.window.get_action_group("file-exists").list_actions(): self.window.get_action_group("file-exists").lookup_action(action).set_enabled(file is not None) if file is not None: self.window.set_title(os.path.basename(file)) if io.file_is_local(file): os.chdir(os.path.dirname(file)) else: self.window.set_title('[' + _('New file') + ']') def __state_find(self, string): "Sets states based on the current search string" for action in self.window.get_action_group("find").list_actions(): self.window.get_action_group("find").lookup_action(action).set_enabled(string != "") def __state_undo(self, undoaction, redoaction): "Sets states based on undoqueue actions" if undoaction is None: s, l = False, _('_Undo') else: s, l = True, _('_Undo %s') % undoaction[1].lower() action = self.window.get_action_group("dynamic").lookup_action("undo") action.set_enabled(s) # TODO action.set_property("label", l) if redoaction is None: s, l = False, _('_Redo') else: s, l = True, _('_Redo %s') % redoaction[1].lower() action = self.window.get_action_group("dynamic").lookup_action("redo") action.set_enabled(s) # TODO action.set_property("label", l) # MISC CALLBACKS # def __cb_clip_copy(self, widget, data = None): "Handles copying to the clipboard" focuswidget = self.window.get_focus() if focuswidget is self.tree: self.clip_copy(self.tree.get_selected()) elif isinstance(focuswidget, Gtk.Label) or isinstance(focuswidget, Gtk.Entry): focuswidget.emit("copy-clipboard") def __cb_clip_cut(self, widget, data = None): "Handles cutting to clipboard" focuswidget = self.window.get_focus() if focuswidget is self.tree: self.clip_cut(self.tree.get_selected()) elif isinstance(focuswidget, Gtk.Entry): focuswidget.emit("cut-clipboard") def __cb_clip_paste(self, widget, data = None): "Handles pasting from clipboard" focuswidget = self.window.get_focus() if focuswidget is self.tree: self.clip_paste(self.entryclipboard.get(), self.tree.get_active()) elif isinstance(focuswidget, Gtk.Entry): focuswidget.emit("paste-clipboard") def __cb_drag_dest(self, widget, context, x, y, seldata, info, time, userdata = None): "Handles file drops" if seldata.data is None: return files = [file.strip() for file in seldata.data.split("\n") if file.strip() != ""] if len(files) > 0: self.file_open(files[0]) def __cb_event_filter(self, event): "Event filter for gdk window" if event.type in (Gdk.EventType.KEY_PRESS, Gdk.EventType.BUTTON_PRESS, Gdk.EventType.MOTION_NOTIFY): self.locktimer.reset() Gtk.main_do_event(event) return Gdk.FilterReturn.CONTINUE def __cb_exception(self, type, value, trace): "Callback for unhandled exceptions" if type == KeyboardInterrupt: sys.exit(1) traceback = util.trace_exception(type, value, trace) sys.stderr.write(traceback) if dialog.Exception(self.window, traceback).run() == True: Gtk.main() else: sys.exit(1) def __cb_file_content_changed(self, widget, file): "Callback for changed file" try: if dialog.FileChanged(self.window, file).run() == True: self.file_open(self.datafile.get_file(), self.datafile.get_password()) except dialog.CancelError: self.statusbar.set_status(_('Open cancelled')) def __cb_file_autolock(self, widget, data = None): "Callback for locking the file" if self.config.get_boolean("file-autolock") == True: self.file_lock() def __cb_screensaver_lock(self, connection, unique_name, object_path, interface, signal, state): if state[0] is True and self.config.get_boolean("file-autolock") == True: self.file_lock() def __cb_quit(self, widget, data = None): "Callback for quit" if self.quit() == False: return True else: return False def __cb_close(self, widget, data = None): "Callback for Close" if self.file_close() == False: return True else: return False def __cb_searchbar_button_clicked(self, widget, direction = data.SEARCH_NEXT): "Callback for searchbar button clicks" self.__entry_find(self, self.searchbar.entry.get_text(), self.searchbar.dropdown.get_active_type(), direction) self.searchbar.entry.select_region(0, -1) def __cb_searchbar_key_press(self, widget, data): "Callback for searchbar key presses" # escape if data.keyval == Gdk.KEY_Escape: context = widget.get_style_context() context.remove_class(Gtk.STYLE_CLASS_ERROR) self.config.set_boolean("view-searchbar", False) def __cb_tree_doubleclick(self, widget, iter): "Handles doubleclicks on the tree" if self.config.get_string("behavior-doubleclick") == "edit": self.entry_edit(iter) elif self.config.get_string("behavior-doubleclick") == "copy": self.clip_chain(self.entrystore.get_entry(iter)) else: self.entry_goto((iter,)) def __cb_tree_drag_received(self, tree, context, x, y, seldata, info, time): "Callback for drag drops on the treeview" # get source and destination data sourceiters = self.entrystore.filter_parents(self.tree.get_selected()) destrow = self.tree.get_dest_row_at_pos(x, y) if destrow is None: destpath = (self.entrystore.iter_n_children(None) - 1, ) pos = Gtk.TreeViewDropPosition.AFTER else: destpath, pos = destrow destiter = self.entrystore.get_iter(destpath) destpath = self.entrystore.get_path(destiter) # avoid drops to current iter or descentants for sourceiter in sourceiters: sourcepath = self.entrystore.get_path(sourceiter) if self.entrystore.is_ancestor(sourceiter, destiter) == True or sourcepath == destpath: context.finish(False, False, time) return elif pos == Gtk.TreeViewDropPosition.BEFORE and sourcepath[:-1] == destpath[:-1] and sourcepath[-1] == destpath[-1] - 1: context.finish(False, False, time) return elif pos == Gtk.TreeViewDropPosition.AFTER and sourcepath[:-1] == destpath[:-1] and sourcepath[-1] == destpath[-1] + 1: context.finish(False, False, time) return # move the entries if pos in (Gtk.TreeViewDropPosition.INTO_OR_BEFORE, Gtk.TreeViewDropPosition.INTO_OR_AFTER): parent = destiter sibling = None elif pos == Gtk.TreeViewDropPosition.BEFORE: parent = self.entrystore.iter_parent(destiter) sibling = destiter elif pos == Gtk.TreeViewDropPosition.AFTER: parent = self.entrystore.iter_parent(destiter) sibpath = list(destpath) sibpath[-1] += 1 sibling = self.entrystore.get_iter(sibpath) self.entry_move(sourceiters, parent, sibling) context.finish(False, False, time) def __cb_tree_keypress(self, widget, data = None): "Handles key presses for the tree" # return if data.keyval == Gdk.KEY_Return: self.entry_edit(self.tree.get_active()) # insert elif data.keyval == Gdk.KEY_Insert: self.entry_add(None, self.tree.get_active()) # delete elif data.keyval == Gdk.KEY_Delete: self.entry_remove(self.tree.get_selected()) # CONFIG CALLBACKS # def __cb_config_toolbar_style(self, config, value, data = None): "Config callback for setting toolbar style" if value == "both": self.toolbar.set_style(Gtk.ToolbarStyle.BOTH) elif value == "both-horiz": self.toolbar.set_style(Gtk.ToolbarStyle.BOTH_HORIZ) elif value == "icons": self.toolbar.set_style(Gtk.ToolbarStyle.ICONS) elif value == "text": self.toolbar.set_style(Gtk.ToolbarStyle.TEXT) else: self.toolbar.unset_style() # UNDO / REDO CALLBACKS # def __cb_redo_add(self, name, actiondata): "Redoes an add action" path, e = actiondata parent = self.entrystore.get_iter(path[:-1]) sibling = self.entrystore.get_iter(path) iter = self.entrystore.add_entry(e, parent, sibling) self.tree.select(iter) def __cb_redo_edit(self, name, actiondata): "Redoes an edit action" path, preentry, postentry = actiondata iter = self.entrystore.get_iter(path) self.entrystore.update_entry(iter, postentry) self.tree.select(iter) def __cb_redo_import(self, name, actiondata): "Redoes an import action" paths, entrystore = actiondata self.entrystore.import_entry(entrystore, None) def __cb_redo_move(self, name, actiondata): "Redoes a move action" newiters = [] for prepath, postpath in actiondata: prepath, postpath = list(prepath), list(postpath) # adjust path if necessary if len(prepath) <= len(postpath): if prepath[:-1] == postpath[:len(prepath) - 1]: if prepath[-1] <= postpath[len(prepath) - 1]: postpath[len(prepath) - 1] += 1 newiter = self.entrystore.move_entry( self.entrystore.get_iter(prepath), self.entrystore.get_iter(postpath[:-1]), self.entrystore.get_iter(postpath) ) newiters.append(newiter) if len(newiters) > 0: self.tree.select(newiters[0]) def __cb_redo_paste(self, name, actiondata): "Redoes a paste action" entrystore, parentpath, paths = actiondata iters = self.entrystore.import_entry(entrystore, None, self.entrystore.get_iter(parentpath)) if len(iters) > 0: self.tree.select(iters[0]) def __cb_redo_remove(self, name, actiondata): "Redoes a remove action" iters = [] for path, entrystore in actiondata: iters.append(self.entrystore.get_iter(path)) for iter in iters: self.entrystore.remove_entry(iter) self.tree.unselect_all() def __cb_undo_add(self, name, actiondata): "Undoes an add action" path, e = actiondata self.entrystore.remove_entry(self.entrystore.get_iter(path)) self.tree.unselect_all() def __cb_undo_edit(self, name, actiondata): "Undoes an edit action" path, preentry, postentry = actiondata iter = self.entrystore.get_iter(path) self.entrystore.update_entry(iter, preentry) self.tree.select(iter) def __cb_undo_import(self, name, actiondata): "Undoes an import action" paths, entrystore = actiondata iters = [self.entrystore.get_iter(path) for path in paths] for iter in iters: self.entrystore.remove_entry(iter) self.tree.unselect_all() def __cb_undo_move(self, name, actiondata): "Undoes a move action" actiondata = actiondata[:] actiondata.reverse() newiters = [] for prepath, postpath in actiondata: prepath, postpath = list(prepath), list(postpath) # adjust path if necessary if len(postpath) <= len(prepath): if postpath[:-1] == prepath[:len(postpath) - 1]: if postpath[-1] <= prepath[len(postpath) - 1]: prepath[len(postpath) - 1] += 1 newiter = self.entrystore.move_entry( self.entrystore.get_iter(postpath), self.entrystore.get_iter(prepath[:-1]), self.entrystore.get_iter(prepath) ) newiters.append(newiter) if len(newiters) > 0: self.tree.select(newiters[-1]) def __cb_undo_paste(self, name, actiondata): "Undoes a paste action" entrystore, parentpath, paths = actiondata iters = [self.entrystore.get_iter(path) for path in paths] for iter in iters: self.entrystore.remove_entry(iter) self.tree.unselect_all() def __cb_undo_remove(self, name, actiondata): "Undoes a remove action" iters = [] for path, entrystore in actiondata: parent = self.entrystore.get_iter(path[:-1]) sibling = self.entrystore.get_iter(path) iter = self.entrystore.import_entry(entrystore, entrystore.iter_nth_child(None, 0), parent, sibling) iters.append(iter) self.tree.select(iters[0]) # PRIVATE METHODS # def __entry_find(self, parent, string, entrytype, direction = data.SEARCH_NEXT): "Searches for an entry" match = self.entrysearch.find(string, entrytype, self.tree.get_active(), direction) context = self.searchbar.entry.get_style_context() if match != None: self.tree.select(match) self.statusbar.set_status(_('Match found for “%s”') % string) context.remove_class(Gtk.STYLE_CLASS_ERROR) else: self.statusbar.set_status(_('No match found for “%s”') % string) context.add_class(Gtk.STYLE_CLASS_ERROR) def __file_autosave(self): "Autosaves the current file if needed" try: if self.datafile.get_file() is None or self.datafile.get_password() is None: return if self.config.get_boolean("file-autosave") == False: return self.datafile.save(self.entrystore, self.datafile.get_file(), self.datafile.get_password()) self.entrystore.changed = False except IOError: pass def __file_load(self, file, password, datafile = None): "Loads data from a data file into an entrystore" # We may need to change the datahandler old_handler = None result = None try: if datafile is None: datafile = self.datafile # Because there are two fileversion we need to check if we are really dealing # with version two. If we aren't chances are high, that we are # dealing with version one. In this case we use the version one # handler and save the file as version two if it is changed, to # allow seemless upgrades. if datafile.get_handler().detect(io.file_read(file)) != True: # Store the datahandler to be reset later on old_handler = datafile.get_handler() # Load the revelation fileversion one handler datafile.set_handler(datahandler.Revelation) dialog.Info(self.window, _('Old file format'), _('Revelation detected that \'%s\' file has the old and actually non-secure file format. It is strongly recommended to save this file with the new format. Revelation will do it automatically if you press save after opening the file.') % file).run() while True: try: result = datafile.load(file, password, lambda: dialog.PasswordOpen(self.window, os.path.basename(file)).run()) break except datahandler.PasswordError: dialog.Error(self.window, _('Incorrect password'), _('The password you entered for the file \'%s\' was not correct.') % file).run() except datahandler.FormatError: self.statusbar.set_status(_('Open failed')) dialog.Error(self.window, _('Invalid file format'), _('The file \'%s\' contains invalid data.') % file).run() except (datahandler.DataError, entry.EntryTypeError, entry.EntryFieldError): self.statusbar.set_status(_('Open failed')) dialog.Error(self.window, _('Unknown data'), _('The file \'%s\' contains unknown data. It may have been created by a newer version of Revelation.') % file).run() except datahandler.VersionError: self.statusbar.set_status(_('Open failed')) dialog.Error(self.window, _('Unknown data version'), _('The file \'%s\' has a future version number, please upgrade Revelation to open it.') % file).run() except datahandler.DetectError: self.statusbar.set_status(_('Open failed')) dialog.Error(self.window, _('Unable to detect filetype'), _('The file type of the file \'%s\' could not be automatically detected. Try specifying the file type manually.') % file).run() except IOError: self.statusbar.set_status(_('Open failed')) dialog.Error(self.window, _('Unable to open file'), _('The file \'%s\' could not be opened. Make sure that the file exists, and that you have permissions to open it.') % file).run() # If we switched the datahandlers before we need to switch back to the # version2 handler here, to ensure a seemless version upgrade on save if old_handler != None: datafile.set_handler(old_handler.__class__) return result def __get_common_usernames(self, e = None): "Returns a list of possibly relevant usernames" ulist = [] if e is not None and e.has_field(entry.UsernameField): ulist.append(e[entry.UsernameField]) ulist.append(pwd.getpwuid(os.getuid())[0]) ulist.extend(self.entrystore.get_popular_values(entry.UsernameField, 3)) ulist = list({}.fromkeys(ulist).keys()) ulist.sort() return ulist # PUBLIC METHODS # def about(self): "Displays the about dialog" dialog.run_unique(dialog.About, self) def clip_chain(self, e): "Copies all passwords from an entry as a chain" if e is None: return secrets = [field.value for field in e.fields if field.datatype == entry.DATATYPE_PASSWORD and field.value != ""] if self.config.get_boolean("clipboard-chain-username") == True and len(secrets) > 0 and e.has_field(entry.UsernameField) and e[entry.UsernameField] != "": secrets.insert(0, e[entry.UsernameField]) if len(secrets) == 0: self.statusbar.set_status(_('Entry has no password to copy')) else: self.clipboard.set(secrets, True) self.statusbar.set_status(_('Password copied to clipboard')) def clip_copy(self, iters): "Copies entries to the clipboard" self.entryclipboard.set(self.entrystore, iters) self.statusbar.set_status(_('Entries copied')) def clip_cut(self, iters): "Cuts entries to the clipboard" iters = self.entrystore.filter_parents(iters) self.entryclipboard.set(self.entrystore, iters) # store undo data (need paths) undoactions = [] for iter in iters: undostore = data.EntryStore() undostore.import_entry(self.entrystore, iter) path = self.entrystore.get_path(iter) undoactions.append((path, undostore)) # remove data for iter in iters: self.entrystore.remove_entry(iter) self.undoqueue.add_action( _('Cut entries'), self.__cb_undo_remove, self.__cb_redo_remove, undoactions ) self.__file_autosave() self.tree.unselect_all() self.statusbar.set_status(_('Entries cut')) def clip_paste(self, entrystore, parent): "Pastes entries from the clipboard" if entrystore is None: return parent = self.tree.get_active() iters = self.entrystore.import_entry(entrystore, None, parent) paths = [self.entrystore.get_path(iter) for iter in iters] self.undoqueue.add_action( _('Paste entries'), self.__cb_undo_paste, self.__cb_redo_paste, (entrystore, self.entrystore.get_path(parent), paths) ) if len(iters) > 0: self.tree.select(iters[0]) self.statusbar.set_status(_('Entries pasted')) def entry_add(self, e = None, parent = None, sibling = None): "Adds an entry" try: if e is None: d = dialog.EntryEdit(self.window, _('Add Entry'), None, self.config, self.clipboard) d.set_fieldwidget_data(entry.UsernameField, self.__get_common_usernames()) e = d.run() iter = self.entrystore.add_entry(e, parent, sibling) self.undoqueue.add_action( _('Add entry'), self.__cb_undo_add, self.__cb_redo_add, (self.entrystore.get_path(iter), e.copy()) ) self.__file_autosave() self.tree.select(iter) self.statusbar.set_status(_('Entry added')) except dialog.CancelError: self.statusbar.set_status(_('Add entry cancelled')) def entry_edit(self, iter): "Edits an entry" try: if iter is None: return e = self.entrystore.get_entry(iter) if type(e) == entry.FolderEntry: d = dialog.FolderEdit(self.window, _('Edit Folder'), e) else: d = dialog.EntryEdit(self.window, _('Edit Entry'), e, self.config, self.clipboard) d.set_fieldwidget_data(entry.UsernameField, self.__get_common_usernames(e)) n = d.run() self.entrystore.update_entry(iter, n) self.tree.select(iter) self.undoqueue.add_action( _('Update entry'), self.__cb_undo_edit, self.__cb_redo_edit, (self.entrystore.get_path(iter), e.copy(), n.copy()) ) self.__file_autosave() self.statusbar.set_status(_('Entry updated')) except dialog.CancelError: self.statusbar.set_status(_('Edit entry cancelled')) def entry_find(self): "Searches for an entry" self.config.set_boolean("view-searchbar", True) self.searchbar.entry.select_region(0, -1) self.searchbar.entry.grab_focus() def entry_folder(self, e = None, parent = None, sibling = None): "Adds a folder" try: if e is None: e = dialog.FolderEdit(self.window, _('Add folder')).run() iter = self.entrystore.add_entry(e, parent, sibling) self.undoqueue.add_action( _('Add folder'), self.__cb_undo_add, self.__cb_redo_add, (self.entrystore.get_path(iter), e.copy()) ) self.__file_autosave() self.tree.select(iter) self.statusbar.set_status(_('Folder added')) except dialog.CancelError: self.statusbar.set_status(_('Add folder cancelled')) def entry_goto(self, iters): "Goes to an entry" for iter in iters: try: # get goto data for entry e = self.entrystore.get_entry(iter) command = self.config.get_string("launcher-%s" % e.id) if command in ("", None): self.statusbar.set_status(_('No goto command found for %s entries') % e.typename) return subst = {} for field in e.fields: subst[field.symbol] = field.value # copy passwords to clipboard chain = [] for field in e.fields: if field.datatype == entry.DATATYPE_PASSWORD and field.value != "": chain.append(field.value) if self.config.get_boolean("clipboard-chain-username") == True and len(chain) > 0 and e.has_field(entry.UsernameField) == True and e[entry.UsernameField] != "" and "%" + entry.UsernameField.symbol not in command: chain.insert(0, e[entry.UsernameField]) self.clipboard.set(chain, True) # generate and run goto command command = util.parse_subst(command, subst) util.execute_child(command) self.statusbar.set_status(_('Entry opened')) except (util.SubstFormatError, config.ConfigError): dialog.Error(self.window, _('Invalid goto command format'), _('The goto command for \'%s\' entries is invalid, please correct it in the preferences.') % e.typename).run() except util.SubstValueError: dialog.Error(self.window, _('Missing entry data'), _('The entry \'%s\' does not have all the data required to open it.') % e.name).run() def entry_move(self, sourceiters, parent = None, sibling = None): "Moves a set of entries" if type(sourceiters) != list: sourceiters = [sourceiters] newiters = [] undoactions = [] for sourceiter in sourceiters: sourcepath = self.entrystore.get_path(sourceiter) newiter = self.entrystore.move_entry(sourceiter, parent, sibling) newpath = self.entrystore.get_path(newiter) undoactions.append((sourcepath, newpath)) newiters.append(newiter) self.undoqueue.add_action( _('Move entry'), self.__cb_undo_move, self.__cb_redo_move, undoactions ) if len(newiters) > 0: self.tree.select(newiters[0]) self.__file_autosave() self.statusbar.set_status(_('Entries moved')) def entry_remove(self, iters): "Removes the selected entries" try: if len(iters) == 0: return entries = [self.entrystore.get_entry(iter) for iter in iters] dialog.EntryRemove(self.window, entries).run() iters = self.entrystore.filter_parents(iters) # store undo data (need paths) undoactions = [] for iter in iters: undostore = data.EntryStore() undostore.import_entry(self.entrystore, iter) path = self.entrystore.get_path(iter) undoactions.append((path, undostore)) # remove data for iter in iters: self.entrystore.remove_entry(iter) self.undoqueue.add_action( _('Remove entry'), self.__cb_undo_remove, self.__cb_redo_remove, undoactions ) self.tree.unselect_all() self.__file_autosave() self.statusbar.set_status(_('Entries removed')) except dialog.CancelError: self.statusbar.set_status(_('Entry removal cancelled')) def file_change_password(self, password = None): "Changes the password of the current data file" try: if password is None: password = dialog.PasswordChange(self.window, self.datafile.get_password()).run() self.datafile.set_password(password) self.entrystore.changed = True self.__file_autosave() self.statusbar.set_status(_('Password changed')) except dialog.CancelError: self.statusbar.set_status(_('Password change cancelled')) def file_close(self): "Closes the current file" try: if self.entrystore.changed == True and dialog.FileChangesClose(self.window).run() == True: if self.file_save(self.datafile.get_file(), self.datafile.get_password()) == False: raise dialog.CancelError self.clipboard.clear() self.entryclipboard.clear() self.entrystore.clear() self.undoqueue.clear() self.statusbar.set_status(_('Closed file %s') % self.datafile.get_file()) self.datafile.close() return True except dialog.CancelError: self.statusbar.set_status(_('Close file cancelled')) return False def file_export(self): "Exports data to a foreign file format" try: file, handler = dialog.ExportFileSelector(self.window).run() datafile = io.DataFile(handler) if datafile.get_handler().encryption == True: password = dialog.PasswordSave(self.window, file).run() else: dialog.FileSaveInsecure(self.window).run() password = None datafile.save(self.entrystore, file, password) self.statusbar.set_status(_('Data exported to %s') % datafile.get_file()) except dialog.CancelError: self.statusbar.set_status(_('Export cancelled')) except IOError: dialog.Error(self.window, _('Unable to write to file'), _('The file \'%s\' could not be opened for writing. Make sure that you have the proper permissions to write to it.') % file).run() self.statusbar.set_status(_('Export failed')) def file_import(self): "Imports data from a foreign file" try: file, handler = dialog.ImportFileSelector(self.window).run() datafile = io.DataFile(handler) entrystore = self.__file_load(file, None, datafile) if entrystore is not None: newiters = self.entrystore.import_entry(entrystore, None) paths = [self.entrystore.get_path(iter) for iter in newiters] self.undoqueue.add_action( _('Import data'), self.__cb_undo_import, self.__cb_redo_import, (paths, entrystore) ) self.statusbar.set_status(_('Data imported from %s') % datafile.get_file()) self.__file_autosave() except dialog.CancelError: self.statusbar.set_status(_('Import cancelled')) def file_lock(self): "Locks the current file" if self.datafile.get_file() is None: return if self.file_locked is True: return password = self.datafile.get_password() if password is None: return self.locktimer.stop() app = Gio.Application.get_default app().get_dbus_connection().signal_unsubscribe(self.dbus_subscription_id) # TODO can this be done more elegantly? transients = [window for window in Gtk.Window.list_toplevels() if window.get_transient_for() == self] # store current state activeiter = self.tree.get_active() oldtitle = self.get_title() # clear application contents self.tree.set_model(None) self.entryview.clear() self.window.set_title('[' + _('Locked') + ']') self.statusbar.set_status(_('File locked')) self.file_locked = True # hide any dialogs for window in transients: window.hide() # lock file try: d = dialog.PasswordLock(self.window, password) if self.entrystore.changed == True: l = ui.ImageLabel(_('Quit disabled due to unsaved changes'), "dialog-warning") d.contents.pack_start(l, True, True, 0) d.get_widget_for_response(Gtk.ResponseType.CANCEL).set_sensitive(False) d.run() except dialog.CancelError: self.quit() # unlock the file and restore state self.tree.set_model(self.entrystore) self.tree.select(activeiter) self.window.set_title(oldtitle) self.statusbar.set_status(_('File unlocked')) self.file_locked = False for window in transients: window.show() self.locktimer.start(self.config.get_int("file-autolock-timeout") * 60) app = Gio.Application.get_default self.dbus_subscription_id = app().get_dbus_connection().signal_subscribe(None, "org.gnome.ScreenSaver", "ActiveChanged", "/org/gnome/ScreenSaver", None, Gio.DBusSignalFlags.NONE, self.__cb_screensaver_lock) def file_new(self): "Opens a new file" try: if self.entrystore.changed == True and dialog.FileChangesNew(self.window).run() == True: if self.file_save(self.datafile.get_file(), self.datafile.get_password()) == False: raise dialog.CancelError self.entrystore.clear() self.datafile.close() self.undoqueue.clear() self.statusbar.set_status(_('New file created')) except dialog.CancelError: self.statusbar.set_status(_('New file cancelled')) def file_open(self, file = None, password = None): "Opens a data file" try: if self.entrystore.changed == True and dialog.FileChangesOpen(self.window).run() == True: if self.file_save(self.datafile.get_file(), self.datafile.get_password()) == False: raise dialog.CancelError if file is None: file = dialog.OpenFileSelector(self.window).run() entrystore = self.__file_load(file, password) if entrystore is None: return self.entrystore.clear() self.entrystore.import_entry(entrystore, None) self.entrystore.changed = False self.undoqueue.clear() self.file_locked = False self.locktimer.start(60 * self.config.get_int("file-autolock-timeout")) self.statusbar.set_status(_('Opened file %s') % self.datafile.get_file()) except dialog.CancelError: self.statusbar.set_status(_('Open cancelled')) def file_save(self, file = None, password = None): "Saves data to a file" try: if file is None: file = dialog.SaveFileSelector(self.window).run() if password is None: password = dialog.PasswordSave(self.window, file).run() self.datafile.save(self.entrystore, file, password) self.entrystore.changed = False self.statusbar.set_status(_('Data saved to file %s') % file) return True except dialog.CancelError: self.statusbar.set_status(_('Save cancelled')) return False except IOError: dialog.Error(self.window, _('Unable to save file'), _('The file \'%s\' could not be opened for writing. Make sure that you have the proper permissions to write to it.') % file).run() self.statusbar.set_status(_('Save failed')) return False def prefs(self): "Displays the application preferences" dialog.run_unique(Preferences, self.window, self.config) def pwcheck(self): "Displays the password checking dialog" dialog.run_unique(dialog.PasswordChecker, self.window, self.config, self.clipboard) def pwgen(self): "Displays the password generator dialog" dialog.run_unique(dialog.PasswordGenerator, self.window, self.config, self.clipboard) def quit(self): "Quits the application" try: if self.entrystore.changed == True and dialog.FileChangesQuit(self.window).run() == True: if self.file_save(self.datafile.get_file(), self.datafile.get_password()) == False: raise dialog.CancelError self.clipboard.clear() self.entryclipboard.clear() self.__save_state() Gtk.Application.quit(self) if sys.exc_info()[1]: # avoid raising an additional exception os._exit(0) else: sys.exit(0) return True except dialog.CancelError: self.statusbar.set_status(_('Quit cancelled')) return False def redo(self): "Redoes the previous action" action = self.undoqueue.get_redo_action() if action is None: return self.undoqueue.redo() self.statusbar.set_status(_('%s redone') % action[1]) self.__file_autosave() def undo(self): "Undoes the previous action" action = self.undoqueue.get_undo_action() if action is None: return self.undoqueue.undo() self.statusbar.set_status(_('%s undone') % action[1]) self.__file_autosave() class Preferences(dialog.Utility): "A preference dialog" def __init__(self, parent, cfg=None): dialog.Utility.__init__(self, parent, _('Preferences')) self.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE) self.set_default_response(Gtk.ResponseType.CLOSE) self.config = cfg self.set_modal(False) self.notebook = ui.Notebook() self.vbox.pack_start(self.notebook, True, True, 0) self.page_general = self.notebook.create_page(_('General')) self.__init_section_files(self.page_general) self.__init_section_password(self.page_general) self.page_interface = self.notebook.create_page(_('Interface')) self.__init_section_doubleclick(self.page_interface) self.__init_section_toolbar(self.page_interface) self.page_gotocmd = self.notebook.create_page(_('Goto Commands')) self.notebook.get_tab_label(self.page_gotocmd).set_hexpand(True) self.__init_section_gotocmd(self.page_gotocmd) self.connect("response", lambda w, d: self.destroy()) def __init_section_doubleclick(self, page): "Sets up the doubleclick section" self.section_doubleclick = page.add_section(_('Doubleclick Action')) # radio-button for go to self.radio_doubleclick_goto = Gtk.RadioButton.new_with_label_from_widget(None, _('Go to account, if possible')) self.radio_doubleclick_goto.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "goto")) self.radio_doubleclick_goto.set_tooltip_text(_('Go to the account (open in external application) on doubleclick, if required data is filled in')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_goto) # radio-button for edit self.radio_doubleclick_edit = Gtk.RadioButton.new_with_label_from_widget(self.radio_doubleclick_goto, label=_('Edit account')) self.radio_doubleclick_edit.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "edit")) self.radio_doubleclick_edit.set_tooltip_text(_('Edit the account on doubleclick')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_edit) # radio-button for copy self.radio_doubleclick_copy = Gtk.RadioButton.new_with_label_from_widget(self.radio_doubleclick_goto, label=_('Copy password to clipboard')) self.radio_doubleclick_copy.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "copy")) self.radio_doubleclick_copy.set_tooltip_text(_('Copy the account password to clipboard on doubleclick')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_copy) {"goto": self.radio_doubleclick_goto, "edit": self.radio_doubleclick_edit, "copy": self.radio_doubleclick_copy}[self.config.get_string("behavior-doubleclick")].set_active(True) def __init_section_files(self, page): "Sets up the files section" self.section_files = page.add_section(_('Files')) # checkbutton and file button for autoloading a file self.check_autoload = Gtk.CheckButton(label=_('Open file on startup:')) self.config.bind("file-autoload", self.check_autoload, "active", Gio.SettingsBindFlags.DEFAULT) self.check_autoload.connect("toggled", lambda w: self.button_autoload_file.set_sensitive(w.get_active())) self.check_autoload.set_tooltip_text(_('When enabled, this file will be opened when the program is started')) self.button_autoload_file = Gtk.FileChooserButton(title=_('Select File to Automatically Open')) if self.config.get_boolean("file-autoload"): self.button_autoload_file.set_filename(self.config.get_string("file-autoload-file")) self.button_autoload_file.connect('file-set', lambda w: self.config.set_string("file-autoload-file", w.get_filename())) self.config.connect("changed::autoload-file", lambda w, fname: self.button_autoload_file.set_filename(w.get_string(fname))) self.button_autoload_file.set_sensitive(self.check_autoload.get_active()) filter = Gtk.FileFilter() filter.set_name(_('Revelation files')) filter.add_mime_type("application/x-revelation") self.button_autoload_file.add_filter(filter) filter = Gtk.FileFilter() filter.set_name(_('All files')) filter.add_pattern("*") self.button_autoload_file.add_filter(filter) eventbox = ui.EventBox(self.button_autoload_file) eventbox.set_tooltip_text(_('File to open when Revelation is started')) hbox = ui.HBox() hbox.pack_start(self.check_autoload, False, False, 0) hbox.pack_start(eventbox, True, True, 0) self.section_files.append_widget(None, hbox) # check-button for autosave self.check_autosave = Gtk.CheckButton(label=_('Automatically save data when changed')) self.config.bind("file-autosave", self.check_autosave, "active", Gio.SettingsBindFlags.DEFAULT) self.check_autosave.set_tooltip_text(_('Automatically save the data file when an entry is added, modified or removed')) self.section_files.append_widget(None, self.check_autosave) # autolock file self.check_autolock = Gtk.CheckButton(label=_('Lock file when inactive for')) self.config.bind("file-autolock", self.check_autolock, "active", Gio.SettingsBindFlags.DEFAULT) self.check_autolock.connect("toggled", lambda w: self.spin_autolock_timeout.set_sensitive(w.get_active())) self.check_autolock.set_tooltip_text(_('Automatically lock the data file after a period of inactivity')) self.spin_autolock_timeout = ui.SpinEntry() self.spin_autolock_timeout.set_range(1, 120) self.spin_autolock_timeout.set_sensitive(self.check_autolock.get_active()) self.config.bind("file-autolock-timeout", self.spin_autolock_timeout, "value", Gio.SettingsBindFlags.DEFAULT) self.spin_autolock_timeout.set_tooltip_text(_('The period of inactivity before locking the file, in minutes')) hbox = ui.HBox() hbox.set_spacing(3) hbox.pack_start(self.check_autolock, False, False, 0) hbox.pack_start(self.spin_autolock_timeout, False, False, 0) hbox.pack_start(ui.Label(_('minutes')), True, True, 0) self.section_files.append_widget(None, hbox) def __init_section_gotocmd(self, page): "Sets up the goto command section" self.section_gotocmd = page.add_section(_('Goto Commands')) for entrytype in entry.ENTRYLIST: if entrytype == entry.FolderEntry: continue e = entrytype() widget = ui.Entry() self.config.bind("launcher-"+e.id, widget, "text", Gio.SettingsBindFlags.DEFAULT) tooltip = _('Goto command for %s accounts. The following expansion variables can be used:') % e.typename + "\n\n" for field in e.fields: tooltip += "%%%s: %s\n" % (field.symbol, field.name) tooltip += "\n" tooltip += _('%%: a "%" sign') + "\n" tooltip += _('%?x: optional expansion variable') + "\n" tooltip += _('%(...%): optional substring expansion') widget.set_tooltip_text(tooltip) self.section_gotocmd.append_widget(e.typename, widget) def __init_section_password(self, page): "Sets up the password section" self.section_password = page.add_section(_('Passwords')) # show passwords checkbutton self.check_show_passwords = Gtk.CheckButton(label=_('Display passwords and other secrets')) self.config.bind("view-passwords", self.check_show_passwords, "active", Gio.SettingsBindFlags.DEFAULT) self.check_show_passwords.set_tooltip_text(_('Display passwords and other secrets, such as PIN codes (otherwise, hide with ******)')) self.section_password.append_widget(None, self.check_show_passwords) # chain username checkbutton self.check_chain_username = Gtk.CheckButton(label=_('Also copy username when copying password')) self.config.bind("clipboard-chain-username", self.check_chain_username, "active", Gio.SettingsBindFlags.DEFAULT) self.check_chain_username.set_tooltip_text(_('When the password is copied to clipboard, put the username before the password as a clipboard "chain"')) self.section_password.append_widget(None, self.check_chain_username) # use punctuation chars checkbutton self.check_punctuation_chars = Gtk.CheckButton(label=_('Use punctuation characters for passwords')) self.config.bind("passwordgen-punctuation", self.check_punctuation_chars, "active", Gio.SettingsBindFlags.DEFAULT) self.check_punctuation_chars.set_tooltip_text(_('When passwords are generated, use punctuation characters like %, =, { or .')) self.section_password.append_widget(None, self.check_punctuation_chars) # password length spinbutton self.spin_pwlen = ui.SpinEntry() self.spin_pwlen.set_range(4, 32) self.config.bind("passwordgen-length", self.spin_pwlen, "value", Gio.SettingsBindFlags.DEFAULT) self.spin_pwlen.set_tooltip_text(_('The number of characters in generated passwords - 8 or more are recommended')) self.section_password.append_widget(_('Length of generated passwords'), self.spin_pwlen) def __init_section_toolbar(self, page): "Sets up the toolbar section" self.section_toolbar = page.add_section(_('Toolbar Style')) # radio-button for desktop default self.radio_toolbar_desktop = Gtk.RadioButton.new_with_label_from_widget(None, _('Use desktop default')) self.radio_toolbar_desktop.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "desktop")) self.radio_toolbar_desktop.set_tooltip_text(_('Show toolbar items with default style')) self.section_toolbar.append_widget(None, self.radio_toolbar_desktop) # radio-button for icons and text self.radio_toolbar_both = Gtk.RadioButton.new_with_label_from_widget(self.radio_toolbar_desktop, _('Show icons and text')) self.radio_toolbar_both.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "both")) self.radio_toolbar_both.set_tooltip_text(_('Show toolbar items with both icons and text')) self.section_toolbar.append_widget(None, self.radio_toolbar_both) # radio-button for icons and important text self.radio_toolbar_bothhoriz = Gtk.RadioButton.new_with_label_from_widget(self.radio_toolbar_desktop, _('Show icons and important text')) self.radio_toolbar_bothhoriz.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "both-horiz")) self.radio_toolbar_bothhoriz.set_tooltip_text(_('Show toolbar items with text beside important icons')) self.section_toolbar.append_widget(None, self.radio_toolbar_bothhoriz) # radio-button for icons only self.radio_toolbar_icons = Gtk.RadioButton.new_with_label_from_widget(self.radio_toolbar_desktop, _('Show icons only')) self.radio_toolbar_icons.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "icons")) self.radio_toolbar_icons.set_tooltip_text(_('Show toolbar items with icons only')) self.section_toolbar.append_widget(None, self.radio_toolbar_icons) # radio-button for text only self.radio_toolbar_text = Gtk.RadioButton.new_with_label_from_widget(self.radio_toolbar_desktop, _('Show text only')) self.radio_toolbar_text.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "text")) self.radio_toolbar_text.set_tooltip_text(_('Show toolbar items with text only')) self.section_toolbar.append_widget(None, self.radio_toolbar_text) {"desktop": self.radio_toolbar_desktop, "both": self.radio_toolbar_both, "both-horiz": self.radio_toolbar_bothhoriz, "icons": self.radio_toolbar_icons, "text": self.radio_toolbar_text }[self.config.get_string("view-toolbar-style")].set_active(True) def run(self): "Runs the preference dialog" self.show_all() # for some reason, Gtk crashes on close-by-escape unless we do this self.get_widget_for_response(Gtk.ResponseType.CLOSE).grab_focus() self.notebook.grab_focus() if __name__ == "__main__": app = Revelation() app.set_flags(Gio.ApplicationFlags.NON_UNIQUE) app.run()