pax_global_header00006660000000000000000000000064151062047660014521gustar00rootroot0000000000000052 comment=cec27b4e66e32482da1067b15658b9964f34cd18 revelation-revelation-0.5.6/000077500000000000000000000000001510620476600160475ustar00rootroot00000000000000revelation-revelation-0.5.6/.bandit000066400000000000000000000201201510620476600173040ustar00rootroot00000000000000 ### 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.6/.github/000077500000000000000000000000001510620476600174075ustar00rootroot00000000000000revelation-revelation-0.5.6/.github/ISSUE_TEMPLATE/000077500000000000000000000000001510620476600215725ustar00rootroot00000000000000revelation-revelation-0.5.6/.github/ISSUE_TEMPLATE/bug-report.md000066400000000000000000000013651510620476600242070ustar00rootroot00000000000000--- 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.6/.github/ISSUE_TEMPLATE/feature-request.md000066400000000000000000000006771510620476600252470ustar00rootroot00000000000000--- 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.6/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000013271510620476600232130ustar00rootroot00000000000000[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.6/.github/workflows/000077500000000000000000000000001510620476600214445ustar00rootroot00000000000000revelation-revelation-0.5.6/.github/workflows/linux.yml000066400000000000000000000015441510620476600233320ustar00rootroot00000000000000name: revelation CI on: push: pull_request: jobs: ubuntu_build: runs-on: ubuntu-latest strategy: matrix: python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 bandit - name: Security check with Bandit run: | bandit -r src/ -x src/bundle/luks.py - name: Lint with flake8 run: | flake8 src/ --count --select=E1,E20,E23,E26,E27,E30,E40,E70,E711,E712,W391 --show-source --statistics revelation-revelation-0.5.6/.gitignore000066400000000000000000000007771510620476600200520ustar00rootroot00000000000000*.*~ *.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.6/.tx/000077500000000000000000000000001510620476600165605ustar00rootroot00000000000000revelation-revelation-0.5.6/.tx/config000066400000000000000000000004701510620476600177510ustar00rootroot00000000000000[main] host = https://www.transifex.com [o:revelation:p:revelation:r:revelationpot] file_filter = po/.po source_file = po/revelation.pot source_lang = en type = PO minimum_perc = 0 replace_edited_strings = false keep_translations = false revelation-revelation-0.5.6/AUTHORS000066400000000000000000000032721510620476600171230ustar00rootroot00000000000000Erik 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.6/COPYING000066400000000000000000000431371510620476600171120ustar00rootroot00000000000000 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.6/ChangeLog000066400000000000000000000000741510620476600176220ustar00rootroot00000000000000ChangeLog will be built from hg repository during make dist revelation-revelation-0.5.6/HACKING000066400000000000000000000006221510620476600170360ustar00rootroot00000000000000RELEASE ======= - update version number in meson.build - set release name in src/lib/config.py.in - update data/info.olasagasti.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.6/NEWS000066400000000000000000000506241510620476600165550ustar00rootroot000000000000002025-11-16: Revelation 0.5.6 ============================ "Gauzak ez dira horrela. Gauzak horrelaxe daude" New features: - Migrate all dialogs to GtkBuilder UI files for better maintainability Bugfixes: - Fix 48x48 icon size [Todd Zullinger] - Fix Enter key not activating default dialog buttons in several dialogs - Fix missing icons for creditcard and database entry types Others: - Drop exprimental LUKS support #43 - Major code modernization: migrate UI creation from Python to GtkBuilder XML files - Remove deprecated GTK2 patterns (Gtk.rc_parse_string, Dialog.vbox, set_border_width) - Remove unused code and wrapper classes (STOCK_ICONS, STOCK_ITEMS, Popup, FileButton, HBox, VBox, etc.) - Replace deprecated Gtk.STOCK_* constants with translatable labels and icon names - Standardize boolean and None comparisons throughout codebase - Add flake8 E711/E712 checks to prevent comparison anti-patterns - Simplify custom widget classes and reduce code duplication - Prepare codebase for future GTK4 migration 2022-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: - New dependency: defusedxml - 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 with 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 characters 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.6/README.md000066400000000000000000000033701510620476600173310ustar00rootroot00000000000000# ![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 Additional packages required on Ubuntu 22.04: `gobject-introspection`, `libgirepository1.0-dev` 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.6/TODO000066400000000000000000000035641510620476600165470ustar00rootroot000000000000000.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.6/authors.xml000066400000000000000000000002031510620476600202510ustar00rootroot00000000000000 Erik Grinaker <erikg@codepoet.no> revelation-revelation-0.5.6/data/000077500000000000000000000000001510620476600167605ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/000077500000000000000000000000001510620476600200735ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/128x128/000077500000000000000000000000001510620476600210305ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/128x128/info.olasagasti.revelation.png000066400000000000000000001070341510620476600267730ustar00rootroot00000000000000PNG  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.6/data/icons/256x256/000077500000000000000000000000001510620476600210345ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/256x256/info.olasagasti.revelation.png000066400000000000000000001445101510620476600267770ustar00rootroot00000000000000PNG  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.6/data/icons/32x32/000077500000000000000000000000001510620476600206545ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/32x32/info.olasagasti.revelation.png000066400000000000000000000047101510620476600266140ustar00rootroot00000000000000PNG  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.6/data/icons/48x48/000077500000000000000000000000001510620476600206725ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/48x48/gnome-mime-application-x-revelation.png000066400000000000000000000166101510620476600303520ustar00rootroot00000000000000PNG  IHDR00WzTXtRaw profile type exifxmPA {$sI?iVDj ~ѣbZXhƠ[_t: $N޿NAtcU=nA#1AՃ=g\l z2] &¼I*sGHHAhס`!ߍYC-iCCPICC profilex}=H@_S*vqP"Z"TB&~A$Qp-8XupqU?@\]]%1ݽ;@hTfundBV+B#^2$)u_<ܟ_[ ij0m MOe%Y%>'7ď\W<~\tYQ3'V:Lx8j: YU[J_+\9$ "PF6XH~?%r)*cUh]?*LNxI8@hhq'@j$bG6pq֔=r|2dSv MPr@[zkPW+Rϻ{:{LcrƆP2 xiTXtXML:com.adobe.xmp \bKGDQ@ pHYs  tIME  3IDATh͚{pU?;tބ&L!0D fTl lƠ[k(a Y]QI#1!j:#$$M~ݿ?:tc9uߛsy4 pgر{t`$c"k-ǐnQSS#rssFLzPrY!6(---̙3n#~2j~B }N7n`ZILL?D#"%%GQ[iӦQXX`/GQܽ_A]]`Z4i~ % {BAedY&!!;o'_ D@ 3v;---\xN8ng8X?3~.EwCww7B(nGAFF& G@'~?eL.y&|{^uP-˲eY|/_.$INw9$I#$G!v^TVU_w?4Yh  "5kuuuqf3SNe]ܻwEQ|nBp1,;{oB'?ݻc,4ҥW1bD?ފΞ=+C\Ag-:Zo 1sq:45uRB I*xx9r( .$(( ˊp+NZvRB3gP>OKKD~-`ZY j1w1cbq:T*T*jY&**-[SUudYR^x%}NpaB"` ̙3ٰaQ_JECC E!$$JłX,L& "((`eyX9B=6Ǔ )ۯa˓صkͣSZϝOAї\tqa4Zf9r$`tSLRh#%%?> 8͜9{-wk(--!$$ł,h5:_*?Q * Vȑ#ioop@ʕ+y[RRBzzr?+n۶8<@$*}Y$ ?Mb?eժUL2EQh4t:j5===\v&NHQQ߿sҸuiii|իWsN̙òeHIIaܽ{fN^z%zh"II$?QG}?_xh4jRRfqq222xWX|9UUUсjd23IgB`9t'66=j aƍc'ؾ?(..fa4)--eŊkZp̠1W wU7,,={O#IR>}FCxx8'NܹsȲ` ::7x5k^npH۱EE ::fhTwԿc f,>>熼R0Llٲ\NBT**ČF`3D6~&p 2_}%~9C8C8{ y==BL&#cǎCX ,^sneBii c*}+]]][+Vp8t ~Cxx*j5V;`fʕ<^K+W5<ZΧ.YJXÂ@zz:mmsr߳Q+++} |y{L_]:jy!ӧ.+㤧gѫ|j̙ {l$hѢ~薂ߗ?Cpbo =;@̒@uuIIٰarz}oE?-XuS Mw); umVKF~_ǀo:݆tZbbFs%jjѨ`o$fL>K9pȨPE"2aahowĂG{Et'HRRf'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.6/data/icons/meson.build000066400000000000000000000020711510620476600222350ustar00rootroot00000000000000# 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.6/data/icons/scalable/000077500000000000000000000000001510620476600216415ustar00rootroot00000000000000revelation-revelation-0.5.6/data/icons/scalable/document-export.svg000066400000000000000000000245651510620476600255330ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.6/data/icons/scalable/document-import.svg000066400000000000000000000265311510620476600255170ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.6/data/icons/scalable/info.olasagasti.revelation.svg000066400000000000000000002106471510620476600276240ustar00rootroot00000000000000 image/svg+xml Jakub Steiner Tuomas Kuosmanen http://jimmac.musichall.cz globe international web www internet network revelation-revelation-0.5.6/data/icons/scalable/object-locked.svg000066400000000000000000000165351510620476600251010ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.6/data/icons/scalable/password-change.svg000066400000000000000000001003571510620476600254550ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.6/data/icons/scalable/password-check.svg000066400000000000000000000762141510620476600253110ustar00rootroot00000000000000 image/svg+xml revelation-revelation-0.5.6/data/icons/scalable/password-generate.svg000066400000000000000000000755421510620476600260310ustar00rootroot00000000000000 image/svg+xml + revelation-revelation-0.5.6/data/info.olasagasti.revelation.desktop.in.in000066400000000000000000000005021510620476600266120ustar00rootroot00000000000000[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.6/data/info.olasagasti.revelation.gschema.xml000066400000000000000000000200721510620476600263410ustar00rootroot00000000000000 '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 generic 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.6/data/info.olasagasti.revelation.metainfo.xml.in000066400000000000000000000116671510620476600271530ustar00rootroot00000000000000 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.6/data/meson.build000066400000000000000000000046421510620476600211300ustar00rootroot00000000000000subdir('icons') # Compile the resources resource_data = files( 'ui/about.ui', 'ui/entry-edit.ui', 'ui/exception.ui', 'ui/help-overlay.ui', 'ui/menubar.ui', 'ui/message.ui', 'ui/popup-tree.ui', 'ui/password-change.ui', 'ui/password-checker.ui', 'ui/password-generator.ui', 'ui/password-lock.ui', 'ui/password-open.ui', 'ui/password-save.ui', 'ui/preferences-doubleclick.ui', 'ui/preferences-files.ui', 'ui/preferences-passwords.ui', 'ui/preferences-toolbar.ui', 'ui/preferences.ui', 'ui/searchbar.ui', 'ui/toolbar.ui', 'ui/folder-edit.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.6/data/revelation.gresource.xml000066400000000000000000000040551510620476600236530ustar00rootroot00000000000000 ui/help-overlay.ui ui/about.ui ui/entry-edit.ui ui/exception.ui ui/folder-edit.ui ui/menubar.ui ui/message.ui ui/popup-tree.ui ui/password-change.ui ui/password-checker.ui ui/password-generator.ui ui/password-lock.ui ui/password-open.ui ui/password-save.ui ui/preferences-doubleclick.ui ui/preferences-files.ui ui/preferences-passwords.ui ui/preferences-toolbar.ui ui/preferences.ui ui/searchbar.ui ui/toolbar.ui revelation-revelation-0.5.6/data/revelation.xml000066400000000000000000000006431510620476600216550ustar00rootroot00000000000000 Revelation password database revelation-revelation-0.5.6/data/ui/000077500000000000000000000000001510620476600173755ustar00rootroot00000000000000revelation-revelation-0.5.6/data/ui/about.ui000066400000000000000000000005511510620476600210470ustar00rootroot00000000000000 Revelation Revelation Website gpl-2-0 revelation-revelation-0.5.6/data/ui/entry-edit.ui000066400000000000000000000125611510620476600220250ustar00rootroot00000000000000 vertical 6 Entry True 0.0 start False True horizontal 12 Name: False end 1.0 right 10 False False 50 True The name of the entry True True False True horizontal 12 Description: False end 1.0 right 10 False False True A description of the entry True True False True horizontal 12 Type: False end 1.0 right 10 False False The type of entry True True False True vertical 6 Notes True 0.0 start False True horizontal True True revelation-revelation-0.5.6/data/ui/exception.ui000066400000000000000000000011141510620476600217270ustar00rootroot00000000000000 120 automatic automatic False False True revelation-revelation-0.5.6/data/ui/folder-edit.ui000066400000000000000000000064511510620476600221400ustar00rootroot00000000000000 vertical 6 Folder True 0.0 start False True horizontal 12 Name: False end 1.0 right 10 False False 25 True The name of the folder True True False True horizontal 12 Description: False end 1.0 right 10 False False True A description of the folder True True False True revelation-revelation-0.5.6/data/ui/help-overlay.ui000066400000000000000000000221641510620476600223500ustar00rootroot00000000000000 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.6/data/ui/menubar.ui000066400000000000000000000311341510620476600213670ustar00rootroot00000000000000 _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.6/data/ui/message.ui000066400000000000000000000030451510620476600213620ustar00rootroot00000000000000 horizontal 12 6 start False False vertical 10 Message True left True 45 True 0.0 0.0 True True True True revelation-revelation-0.5.6/data/ui/password-change.ui000066400000000000000000000052641510620476600230300ustar00rootroot00000000000000 horizontal horizontal vertical 6 12 12 6 6 horizontal 12 Current password: start 0.0 False True horizontal 12 New password: start 0.0 False True horizontal 12 Confirm password: start 0.0 False True revelation-revelation-0.5.6/data/ui/password-checker.ui000066400000000000000000000062021510620476600232000ustar00rootroot00000000000000 vertical 6 Password Checker True 0.0 start False True horizontal 12 Password: start 0.0 False 40 True Enter a password to check False True horizontal 12 horizontal 6 True The result of the check 3 False True Enter a password to check True True True True False True revelation-revelation-0.5.6/data/ui/password-generator.ui000066400000000000000000000106031510620476600235620ustar00rootroot00000000000000 vertical 6 Password Generator True 0.0 start False True horizontal 12 Password: False end 1.0 right 10 False False The generated password False False True True True False True horizontal 12 Length: False end 1.0 right 10 False False 4 256 1 5 8 The number of characters in generated passwords - 8 or more are recommended True True length_spin_adj True True False True Use punctuation characters for passwords When passwords are generated, use punctuation characters like %, =, { or . start False True revelation-revelation-0.5.6/data/ui/password-lock.ui000066400000000000000000000021071510620476600225240ustar00rootroot00000000000000 vertical 6 12 12 6 6 horizontal 12 Password: start 0.0 False True revelation-revelation-0.5.6/data/ui/password-open.ui000066400000000000000000000030101510620476600225270ustar00rootroot00000000000000 vertical 6 12 12 6 horizontal 12 Password: False start 0.0 False False False True True True False True revelation-revelation-0.5.6/data/ui/password-save.ui000066400000000000000000000037711510620476600225420ustar00rootroot00000000000000 horizontal horizontal vertical 6 12 12 6 6 horizontal 12 New password: start 0.0 False True horizontal 12 Confirm password: start 0.0 False True revelation-revelation-0.5.6/data/ui/popup-tree.ui000066400000000000000000000065461510620476600220470ustar00rootroot00000000000000
_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.6/data/ui/preferences-doubleclick.ui000066400000000000000000000037631510620476600245240ustar00rootroot00000000000000 vertical 6 Doubleclick Action True 0.0 start False True Go to account, if possible Go to the account (open in external application) on doubleclick, if required data is filled in False True Edit account Edit the account on doubleclick False True Copy password to clipboard Copy the account password to clipboard on doubleclick False True revelation-revelation-0.5.6/data/ui/preferences-files.ui000066400000000000000000000107061510620476600233410ustar00rootroot00000000000000 vertical 6 Files True 0.0 start False True horizontal 12 Open file on startup: When enabled, this file will be opened when the program is started False False Select File to Automatically Open File to open when Revelation is started True True True False True Automatically save data when changed Automatically save the data file when an entry is added, modified or removed False True horizontal 3 Lock file when inactive for Automatically lock the data file after a period of inactivity False False 1 120 1 5 1 The period of inactivity before locking the file, in minutes True spin_autolock_timeout_adj False False minutes True True True False True revelation-revelation-0.5.6/data/ui/preferences-passwords.ui000066400000000000000000000075761510620476600242770ustar00rootroot00000000000000 vertical 6 Passwords True 0.0 start False True Display passwords and other secrets Display passwords and other secrets, such as PIN codes (otherwise, hide with ******) False True Also copy username when copying password When the password is copied to clipboard, put the username before the password as a clipboard "chain" False True Use punctuation characters for passwords When passwords are generated, use punctuation characters like %, =, { or . False True horizontal 12 Length of generated passwords: False end 1.0 right 10 False False 4 32 1 5 8 The number of characters in generated passwords - 8 or more are recommended True spin_pwlen_adj True True False True revelation-revelation-0.5.6/data/ui/preferences-toolbar.ui000066400000000000000000000053531510620476600237030ustar00rootroot00000000000000 vertical 6 Toolbar Style True 0.0 start False True Use desktop default Show toolbar items with default style False True Show icons and text Show toolbar items with both icons and text False True Show icons and important text Show toolbar items with text beside important icons False True Show icons only Show toolbar items with icons only False True Show text only Show toolbar items with text only False True revelation-revelation-0.5.6/data/ui/preferences.ui000066400000000000000000000017761510620476600222500ustar00rootroot00000000000000 vertical 18 vertical 18 vertical 18 General Interface Goto Commands True revelation-revelation-0.5.6/data/ui/searchbar.ui000066400000000000000000000025161510620476600216720ustar00rootroot00000000000000 horizontal 0 Text to search for Find the previous match go-up 1 Find the next match go-down 1 revelation-revelation-0.5.6/data/ui/toolbar.ui000066400000000000000000000060401510620476600213760ustar00rootroot00000000000000 both-horiz document-open _Open True Open a file document-save _Save True Save data to a file True list-add Add Entry True Create a new entry True folder-new Add folder True Create a new folder go-jump _Go to True Go to the selected entries True document-edit _Edit True Edit the selected entry edit-delete Re_move True Remove the selected entries revelation-revelation-0.5.6/meson.build000066400000000000000000000024641510620476600202170ustar00rootroot00000000000000project('revelation', version : '0.5.6', 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.6/meson_post_conf.py000066400000000000000000000010131510620476600216070ustar00rootroot00000000000000#!/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.6/meson_post_install.py000066400000000000000000000021211510620476600223310ustar00rootroot00000000000000#!/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.6/po/000077500000000000000000000000001510620476600164655ustar00rootroot00000000000000revelation-revelation-0.5.6/po/LINGUAS000066400000000000000000000001571510620476600175150ustar00rootroot00000000000000# 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.6/po/Makevars000066400000000000000000000066761510620476600202000ustar00rootroot00000000000000# 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.6/po/POTFILES.in000066400000000000000000000014251510620476600202440ustar00rootroot00000000000000data/info.olasagasti.revelation.desktop.in.in data/info.olasagasti.revelation.gschema.xml data/info.olasagasti.revelation.metainfo.xml.in data/ui/about.ui data/ui/entry-edit.ui data/ui/exception.ui data/ui/folder-edit.ui data/ui/help-overlay.ui data/ui/menubar.ui data/ui/message.ui data/ui/password-change.ui data/ui/password-checker.ui data/ui/password-generator.ui data/ui/password-lock.ui data/ui/password-open.ui data/ui/password-save.ui data/ui/popup-tree.ui data/ui/preferences-doubleclick.ui data/ui/preferences-files.ui data/ui/preferences-passwords.ui data/ui/preferences-toolbar.ui data/ui/preferences.ui data/ui/searchbar.ui data/ui/toolbar.ui src/lib/config.py.in src/lib/datahandler/xhtml.py src/lib/dialog.py src/lib/entry.py src/lib/ui.py src/lib/util.py src/revelation.py revelation-revelation-0.5.6/po/POTFILES.skip000066400000000000000000000000221510620476600205740ustar00rootroot00000000000000src/lib/config.py revelation-revelation-0.5.6/po/ca.po000066400000000000000000001505501510620476600174160ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: David Planella , 2010\n" "Language-Team: Catalan (http://app.transifex.com/revelation/revelation/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Gestor de Contrasenyes" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Organitza i assegura les teves contrasenyes" #: 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "El nom de l'entrada" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Una descripció de l'entrada" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "El tipus d'entrada" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notes" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Carpeta" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "El nom de la carpeta" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Una descripció de la carpeta" #: data/ui/help-overlay.ui:13 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 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 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 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 "_Fitxer" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nou" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Obre" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Desa" #: 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:46 msgid "_Lock" msgstr "_Bloca" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importa" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "E_xporta" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Tanca" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Surt" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Edita" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Desfés" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Torna a executar" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "_Suprimeix" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Vés a" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Comprovador de contrasenyes" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Introduïu una contrasenya a comprovar" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "El resultat de la comprovació" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Generador de contrasenyes" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "La contrasenya generada" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Usa caràcters de puntuació per a les contrasenyes" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "En generar les contrasenyes, utilitza caràcters de puntuació com %, =, { o ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Acció del doble clic" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Vés al compte, si és possible" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Edita el compte" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Edita el compte en fer doble clic" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Copia la contrasenya al porta-retalls" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia la contrasenya del compte al porta-retalls en fer doble clic" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Fitxers" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Obre aquest fitxer en iniciar:" #: data/ui/preferences-files.ui:25 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 " #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Seleccioneu el fitxer a obrir automàticament" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Fitxer a obrir en iniciar el Revelation" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Desa les dades automàticament quan canviïn" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Bloca el fitxer després d'haver estat inactiu durant" #: data/ui/preferences-files.ui:66 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" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "El període d'inactivitat abans de blocar el fitxer, en minuts" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minuts" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Contrasenyes" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Mostra les contrasenyes i altres secrets" #: data/ui/preferences-passwords.ui:21 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 ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Copia també el nom d'usuari en copiar la contrasenya" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Estil de la barra d'eines" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Utilitza la configuració predeterminada de l'escriptori" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Mostra els elements de la barra d'eines amb l'estil predeterminat" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Mostra les icones i el text" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Mostra els elements de la barra d'eines amb icones i text" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Mostra les icones i el text important" #: data/ui/preferences-toolbar.ui:41 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" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Mostra només les icones" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Mostra els elements de la barra d'eines només amb icones" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Mostra només el text" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Mostra els elements de la barra d'eines només amb text" #: data/ui/preferences.ui:17 msgid "General" msgstr "General" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interfície" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Ordres «Vés a»" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Text a cercar" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Cerca la coincidència anterior" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Cerca la coincidència següent" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Obre un fitxer" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Desa les dades en un fitxer" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Afegeix una entrada" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Crea una entrada nova" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Afegeix una carpeta" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Crea un fitxer nou" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Vés a les entrades seleccionades" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Edita l'entrada seleccionada" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Suprimeix les entrades seleccionades" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Llista de comptes del Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Llista de comptes" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Creat:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Versió del Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Ha canviat el fitxer" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Descarta" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Voleu desar els canvis al fitxer actual?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Voleu desar els canvis abans d'obrir?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Voleu desar els canvis abans de sortir?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Voleu reemplaçar el fitxer existent?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Voleu desar en un fitxer insegur?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Seleccioneu el fitxer on exportar" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Tipus de fitxer" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Seleccioneu el fitxer a importar" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Detecció automàtica" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Seleccioneu el fitxer a obrir" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Fitxers del Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Tots els fitxers" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Seleccioneu el fitxer on desar" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Introduïu la contrasenya nova" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "La contrasenya és incorrecta" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Les contrasenyes no coincideixen" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Voleu utilitzar una contrasenya insegura?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Introduïu la contrasenya per a desblocar el fitxer" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Introduïu la contrasenya del fitxer" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Introduïu la contrasenya del fitxer" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Les contrasenyes que heu introduït no concorden." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "No s'ha introduït cap contrasenya" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Dades del compte" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notes per a l'entrada" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "No s'ha especificat cap nom" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Heu d'introduir un nom per al compte" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Segur que voleu suprimir les «%i» entrades seleccionades?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Segur que voleu suprimir la carpeta «%s»?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Segur que voleu suprimir el compte «%s»?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Confirmeu que voleu suprimir aquest compte." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Heu d'introduir un nom per a la carpeta" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Un gestor de contrasenyes per a l'escriptori GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "s'ha produït un error desconegut" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "La contrasenya sembla bona" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "La contrasenya %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Targeta de crèdit" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Clau criptogràfica" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Base de dades" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Pany de porta" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Adreça electrònica" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Genèric" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telèfon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Intèrpret d'ordres" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Escriptori remot" #: src/lib/entry.py:338 msgid "Website" msgstr "Lloc web" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Número de targeta" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Tipus de targeta" #: src/lib/entry.py:420 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:430 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificat, com ara un certificat SSL X.509" #: src/lib/entry.py:452 msgid "Code" msgstr "Codi" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Un codi per a accedir a quelcom" #: src/lib/entry.py:464 msgid "A database name" msgstr "Un nom de base de dades" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domini" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Una adreça de correu electrònic" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Data de venciment" #: src/lib/entry.py:497 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:507 msgid "Hostname" msgstr "Nom del servidor" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Fitxer de clau" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Ubicació" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Una ubicació física, com ara l'entrada de l'oficina" #: src/lib/entry.py:540 msgid "Password" msgstr "Contrasenya" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Número de telèfon" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Un número de telèfon" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Número de port" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Nom d'usuari" #: src/lib/entry.py:596 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:37 msgid "_Continue" msgstr "Co_ntinua" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Genera" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Afegeix l'entrada" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Afegeix la carpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Canvia" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Torna a carregar" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Reemplaça" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Desbloca" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Actualitza" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Copia la contrasenya" #: src/lib/ui.py:432 msgid "Select File" msgstr "Seleccioneu el fitxer" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Navega..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Genera" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notes: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "S'ha actualitzat fa %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Qualsevol tipus" #: src/lib/util.py:56 msgid "is too short" msgstr "és massa curta" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "no äes prou variat" #: src/lib/util.py:89 msgid "is too weak" msgstr "és massa dèbil" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "és un palíndrom" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i segons" #: src/lib/util.py:318 msgid "years" msgstr "anys" #: src/lib/util.py:318 msgid "year" msgstr "any" #: src/lib/util.py:326 msgid "months" msgstr "mesos" #: src/lib/util.py:326 msgid "month" msgstr "mes" #: src/lib/util.py:330 msgid "weeks" msgstr "setmanes" #: src/lib/util.py:330 msgid "week" msgstr "setmana" #: src/lib/util.py:334 msgid "days" msgstr "dies" #: src/lib/util.py:334 msgid "day" msgstr "dia" #: src/lib/util.py:338 msgid "hours" msgstr "hores" #: src/lib/util.py:338 msgid "hour" msgstr "hora" #: src/lib/util.py:342 msgid "minute" msgstr "minut" #: src/lib/util.py:346 msgid "seconds" msgstr "segons" #: src/lib/util.py:346 msgid "second" msgstr "segon" #: src/revelation.py:89 msgid "Missing data files" msgstr "Manquen els fitxers de dades" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Manquen les dades de configuració" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Fitxers de dades no vàlids" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Fitxer nou" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Desfés %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Torna a executar %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "S'ha cancel·lat l'apertura" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Format de fitxer antic" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Ha fallat l'apertura" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "format de fitxer no vàlid" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "El fitxer «%s» conté dades no vàlides." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Les dades són desconegudes" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Es desconeix la versió de les dades" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "No s'ha pogut detectar el tipus de fitxer" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "No s'ha pogut obrir el fitxer" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "L'entrada no té cap contrasenya a copiar" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "s'ha copiat la contrasenya al porta-retalls" #: src/revelation.py:1123 msgid "Entries copied" msgstr "S'han copiat entrades" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Retalla entrades" #: src/revelation.py:1151 msgid "Entries cut" msgstr "s'han retallat entrades" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Enganxa les entrades" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "S'han enganxat entrades" #: src/revelation.py:1186 msgid "Add entry" msgstr "Afegeix una entrada" #: src/revelation.py:1192 msgid "Entry added" msgstr "S'ha afegit l'entrada" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "S'ha cancel·lat l'addició d'una entrada" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Edita la carpeta" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Edita l'entrada" #: src/revelation.py:1218 msgid "Update entry" msgstr "Actualitza l'entrada" #: src/revelation.py:1223 msgid "Entry updated" msgstr "S'ha actualitzat l'entrada" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "S'ha cancel·lat l'edició de l'entrada" #: src/revelation.py:1251 msgid "Folder added" msgstr "S'ha afegit la carpeta" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "S'ha cancel·lat l'addició d'una carpeta" #: src/revelation.py:1267 #, 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:1290 msgid "Entry opened" msgstr "S'ha obert l'entrada" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Format d'ordre «vés a» no vàlid" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Manquen les dades de l'entrada" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Desplaça l'entrada" #: src/revelation.py:1324 msgid "Entries moved" msgstr "S'han desplaçat entrades" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Suprimeix l'entrada" #: src/revelation.py:1356 msgid "Entries removed" msgstr "S'han suprimit entrades" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "S'ha cancel·lat la supressió de l'entrada" #: src/revelation.py:1372 msgid "Password changed" msgstr "s'ha canviat la contrasenya" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "S'ha cancel·lat el canvi de contrasenya" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "S'han exportat les dades a %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "S'ha cancel·lat l'exportació" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "No s'ha pogut escriure al fitxer" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Ha fallat l'exportació" #: src/revelation.py:1435 msgid "Import data" msgstr "Importa dades" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "S'ha importat les dades de %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "S'ha cancel·lat la importació" #: src/revelation.py:1474 msgid "Locked" msgstr "Blocat" #: src/revelation.py:1475 msgid "File locked" msgstr "S'ha blocat el fitxer" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "S'ha inhabilitat la sortida degut als canvis no desats" #: src/revelation.py:1500 msgid "File unlocked" msgstr "S'ha desblocat el fitxer" #: src/revelation.py:1521 msgid "New file created" msgstr "S'ha creat un fitxer nou" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "S'ha cancel·lat la creació d'un fitxer nou" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "S'ha obert el fitxer %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "S'han desat les dades al fitxer %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "S'ha cancel·lat el desament" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "No s'ha pogut desar el fitxer" #: src/revelation.py:1576 msgid "Save failed" msgstr "Ha fallat el desament" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "S'ha cancel·lat la sortida" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "s'ha tornat a aplicar %s" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "s'ha desfet %s" #: src/revelation.py:1648 msgid "Preferences" msgstr "Preferències" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: el signe \"%\"" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: variable d'expansió opcional" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): expansió de subcadena opcional" revelation-revelation-0.5.6/po/cs.po000066400000000000000000001371731510620476600174460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Czech (http://app.transifex.com/revelation/revelation/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Název položky" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Popis položky" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Typ položky" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Adresář" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Název složky" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Popis složky" #: data/ui/help-overlay.ui:13 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 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 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 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 "_Soubor" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nový" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Otevřít" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Uložit" #: 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:46 msgid "_Lock" msgstr "_Zamknout" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importovat" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exportovat" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Zavřít" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "U_končit" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Upravit" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Zpět" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "Zn_ovu" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Odst_ranit" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Přejít na" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Kontrolor hesel" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Vložte kontrolované heslo" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Výsledek zkoušky" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Generátor hesel" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Vygenerované heslo" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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ů" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Akce při dvojkliku" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Provést akci, je-li to možné" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Upravit účet" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Upravit účet po dvojkliku" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Kopírovat heslo do schránky" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Při dvojkliku kopírovat heslo k účtu do schránky" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Soubory" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Při spuštění otevřít:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Vybrat soubor k automatickému otevření" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Při spuštění Revelation otevřít tento soubor" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Automaticky uložit data po provedení změn" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Zamknout při nečinnosti po" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automaticky zamknout datový soubor při nečinnosti" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Po jaké době nečinnosti zamknout soubor (v minutách)" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minut" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Hesla" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Zobrazit hesla a jiná tajemství" #: data/ui/preferences-passwords.ui:21 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 ******" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Při kopírování hesla kopírovat i uživatelské jméno" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Styl lišty nástrojů" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Výchozí nastavení desktopu" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Zobrazit ikony a text" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Zobrazit ikony a důležitý text" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Zobrazit pouze ikony" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Zobrazit v hlavní liště jen ikony" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Zobrazit pouze text" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "Obecné" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Rozhraní" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Příkazy pro akce" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Hledat text" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Najít předchozí shodu" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Nalézt shodu" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Otevřít soubor" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Uložit data do souboru" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Přidat položku" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Vytvořit novou položku" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Přidat složku" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Vytvořit novou složku" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Přejít na vybrané položky" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Upravit vybranou položku" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Odstranit vybrané položky" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Seznam účtů Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Seznam účtů" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Vytvořeno:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Verze Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Soubor byl změněn" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Zahodit" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Uložit změny v aktuálním souboru?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Uložit změny před otevřením?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Uložit změny před ukončením?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Nahradit existující soubor?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Uložit do nezabezpečeného souboru?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Vybrat soubor, do kterého exportovat" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Typ souboru" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Vybrat soubor pro import" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Detekovat automaticky" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Vybrat soubor k otevření" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Soubory Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Všechny soubory" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Vyberte soubor pro uložení" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Vložte nové heslo" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Nesprávné heslo" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Hesla nesouhlasí" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Použít nebezpečné heslo?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:649 msgid "Enter password to unlock file" msgstr "K odemčení souboru vložte heslo" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Vložte heslo souboru" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Vložte heslo pro soubor" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Vložená hesla nesouhlasí." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Nebylo vloženo heslo" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Data účtu" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nebyl vložen název" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Musíte napsat název účtu" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Opravdu odstranit %i vybraných položek?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Opravdu odstranit složku '%s'?" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "Opravdu odstranit účet '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Potvrďte, prosím, odstranění tohoto účtu." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Musíte napsat název složky" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Správce hesel pro prostředí GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Neznámá chyba" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Heslo je dobré" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Heslo %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kreditkarta" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Databáze" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Dveřní zámek" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Email" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Obecné" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:338 msgid "Website" msgstr "Webstránka" #: src/lib/entry.py:355 msgid "VNC" msgstr "" #: src/lib/entry.py:408 msgid "Card number" msgstr "Číslo karty" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Typ karty" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ kreditní karty (MasterCard, Visa...)" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV číslo" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "" #: src/lib/entry.py:441 msgid "Certificate" msgstr "Certifikát" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Certifikát, např. X.509 SSL certifikát" #: src/lib/entry.py:452 msgid "Code" msgstr "Kód" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:464 msgid "A database name" msgstr "Název databáze" #: src/lib/entry.py:474 msgid "Domain" msgstr "Doména" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:486 msgid "An email address" msgstr "Emailová adresa" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Datum expirace" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Měsíc expirace kreditní karty" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "" #: src/lib/entry.py:519 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:529 msgid "Location" msgstr "Umístění" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Fyzické umístění, např. vchod do kanceláře" #: src/lib/entry.py:540 msgid "Password" msgstr "Heslo" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:551 msgid "Phone number" msgstr "Telefonní číslo" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Telefonní číslo" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:573 msgid "Port number" msgstr "Číslo portu" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL, např. webová adresa" #: src/lib/entry.py:595 msgid "Username" msgstr "Uživatelské jméno" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Pokračovat" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Vygenerovat" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Přidat položku" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Přidat složku" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Změnit" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Znovu načíst" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Nahradit" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Odemknout" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Aktualizovat" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Kopírovat heslo" #: src/lib/ui.py:432 msgid "Select File" msgstr "Vybrat soubor" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Procházet..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Generovat" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "%s od aktualizace" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Jakýkoli typ" #: src/lib/util.py:56 msgid "is too short" msgstr "je příliš krátké" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "není dostatečně různorodé" #: src/lib/util.py:89 msgid "is too weak" msgstr "je příliš slabé" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "je palindrom" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekund" #: src/lib/util.py:318 msgid "years" msgstr "let" #: src/lib/util.py:318 msgid "year" msgstr "rok" #: src/lib/util.py:326 msgid "months" msgstr "měsíce" #: src/lib/util.py:326 msgid "month" msgstr "měsíc" #: src/lib/util.py:330 msgid "weeks" msgstr "týdnů" #: src/lib/util.py:330 msgid "week" msgstr "týden" #: src/lib/util.py:334 msgid "days" msgstr "dny" #: src/lib/util.py:334 msgid "day" msgstr "den" #: src/lib/util.py:338 msgid "hours" msgstr "hodiny" #: src/lib/util.py:338 msgid "hour" msgstr "hodina" #: src/lib/util.py:342 msgid "minute" msgstr "minuta" #: src/lib/util.py:346 msgid "seconds" msgstr "sekundy" #: src/lib/util.py:346 msgid "second" msgstr "sekunda" #: src/revelation.py:89 msgid "Missing data files" msgstr "Chybí datové soubory" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Chybí konfigurační data" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation nenalezl konfigurační data, reinstalujte Revelelation, prosím." #: src/revelation.py:97 msgid "Invalid data files" msgstr "Neplatné datové soubory" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Nový soubor" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Zpět %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Znovu %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Otevírání zrušeno" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Otevírání selhalo" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Neplatný formát souboru" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Soubor '%s' obsahuje neplatná data." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Neznámá data" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Neznámá verze dat" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Nelze určit typ souboru" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Nelze otevřít soubor" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Položka nemá heslo ke kopírování" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Heslo zkopírováno do schránky" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Položky zkopírovány" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Vyjmout položky" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Položky vyjmuty" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Vložit položky" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Položky vloženy" #: src/revelation.py:1186 msgid "Add entry" msgstr "Přidat položku" #: src/revelation.py:1192 msgid "Entry added" msgstr "Položka přidána" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Přidání položky bylo zrušeno" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Upravit složku" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Upravit položku" #: src/revelation.py:1218 msgid "Update entry" msgstr "Aktualizovat položku" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Položka aktualizována" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Úprava položky byla zrušena" #: src/revelation.py:1251 msgid "Folder added" msgstr "Složka přidána" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Přidání složky bylo zrušeno" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Položka otevřena" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Neplatný formát příkazu akce" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "Chybí data položek" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "Přesunout položku" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Položky přesunuty" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Odstranit položku" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Položky odstraněny" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Odstranění položky zrušeno" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Změna hesla zrušena" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Data exportována do %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Export byl zrušen" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Nelze zapisovat do souboru" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Export selhal" #: src/revelation.py:1435 msgid "Import data" msgstr "Importovat data" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Data importována z %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Import zrušen" #: src/revelation.py:1474 msgid "Locked" msgstr "Uzamčeno" #: src/revelation.py:1475 msgid "File locked" msgstr "Soubor byl uzamčen" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Ukončení zrušeno kvůli neuloženým změnám" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Soubor byl odemčen" #: src/revelation.py:1521 msgid "New file created" msgstr "Vytvořen nový soubor" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Vytvoření nového souboru zrušeno" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Byl otevřen soubor %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Data uložena do souboru %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Ukládání zrušeno" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Nelze uložit soubor" #: src/revelation.py:1576 msgid "Save failed" msgstr "Ukládání selhalo" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Ukončení zrušeno" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "Nastavení" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/de.po000066400000000000000000001477171510620476600174360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Christian Hartlage , 2016\n" "Language-Team: German (http://app.transifex.com/revelation/revelation/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Password-Manager" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Sicheres Verwalten Ihrer Passwörter" #: 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Der Name des Eintrags" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Eine Beschreibung des Eintrags" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Die Art des Eintrags" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notizen" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Ordner" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Der Name des Ordners" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Eine Beschreibung des Ordners" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Öffnen" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Speichern" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Sperren" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importieren" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exportieren" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Bearbeiten" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Rückgängig" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Wiederherstellen" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "En_tfernen" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Gehe zu" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Passwort-Prüfer" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Geben Sie ein neues Passwort zur Prüfung ein" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Das Resultat der Prüfung" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Passwort-Generator" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Das erzeugte Passwort" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Sonderzeichen für Passwörter verwenden" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Beim Erzeugen von Passwörtern werden Sonderzeichen wie %, =, { oder . verwendet." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Doppelklick-Aktion" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Zum Konto gehen, wenn möglich" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Konto bearbeiten" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Das Konto bei Doppelklick bearbeiten" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Passwort in die Zwischenablage kopieren" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Das Kontenpasswort bei Doppelklick in die Zwischenablage kopieren" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Dateien" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Datei beim Start öffnen:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Datei zum automatischen Öffnen auswählen" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Datei, die geöffnet werden soll, wenn Revelation gestartet wird" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Automatisches Speichern bei Änderungen der Daten" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Datei sperren, wenn inaktiv für" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatisches Sperren der Datendatei nach einer Weile der Inaktivität" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Die Inaktivitäts-Zeitspanne, bevor die Datei gesperrt wird; in Minuten" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "Minuten" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Passwörter" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Passwörter und andere Geheimnisse anzeigen" #: data/ui/preferences-passwords.ui:21 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)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Auch den Benutzernamen kopieren, wenn das Passwort kopiert wird" #: data/ui/preferences-passwords.ui:31 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." #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Werkzeugleisten-Stil" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Desktop-Voreinstellung benutzen" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Werkzeugleisten-Elemente im voreingestellten Stil anzeigen" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Symbole und Text anzeigen" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Werkzeugleisten-Elemente mit Symbolen und Text anzeigen" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Symbole und wichtigen Text anzeigen" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Werkzeugleisten-Elemente mit Text neben wichtigen symbolen anzeigen" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Nur Symbole anzeigen" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Werkzeugleisten-Elemente nur mit Symbolen anzeigen" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Nur Text anzeigen" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Werkzeigleisten-Elemente nur mit Text anzeigen" #: data/ui/preferences.ui:17 msgid "General" msgstr "Allgemein" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Schnittstelle" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Aufzurufende Befehle" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Zu suchender Text" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Den vorherigen Treffer suchen" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Den nächsten Treffer suchen" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Eine Datei öffnen" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Daten in einer Datei speichern" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Eintrag hinzufügen" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Neuen Eintrag erstellen" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Ordner hinzufügen" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Neuen Ordner erstellen" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Zu den ausgewählten Einträgen gehen" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Den ausgewählten Eintrag bearbeiten" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Ausgewählte Einträge entfernen" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation-Kontenliste" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Kontenliste" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Erstellt:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation Version:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Datei wurde verändert" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Verwerfen" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Änderungen in die aktuelle Datei speichern?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Änderungen vor dem Öffnen speichern?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Änderungen vor dem Beenden speichern?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Vorhandene Datei ersetzen?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "In eine unsichere Datei speichern?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Datei zum Exportieren auswählen" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Dateityp" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Datei zum Importieren auswählen" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Automatisch erkennen" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Datei zum Öffnen auswählen" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation-Dateien" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Alle Dateien" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Datei zum Speichern auswählen" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Geben Sie ein neues Passwort ein" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Falsches Passwort" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Passwörter stimmen nicht überein" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Passwort und Passwortbestätigung stimmen nicht überein." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Unsicheres Passwort verwenden?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Geben Sie ein Passwort zum Entsperren der Datei ein" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Geben Sie ein Dateipasswort ein" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Geben Sie ein Passwort ein für Datei" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Die von Ihnen eingegeben Passwörter stimmen nicht überein." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Kein Passwort eingegeben" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Kontodaten" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notizen für den Eintrag" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Name nicht eingegeben" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Sie müssen einen Namen für das Konto eingeben" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Die %i gewählten Einträge wirklich entfernen?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Ordner »%s« wirklich entfernen?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Konto »%s« wirklich entfernen?" #: src/lib/dialog.py:988 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:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Sie müssen einen Namen für den Ordner eingeben" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Ein Passwort-Manager für den GNOME Desktop" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Unbekannter Fehler" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Das Passwort scheint gut zu sein" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Das Passwort %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kreditkarte" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Schlüssel" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Datenbank" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Türschloss" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "E-Mail" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Allgemein" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Entfernter Desktop" #: src/lib/entry.py:338 msgid "Website" msgstr "Website" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kartennummer" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Die Nummer einer Kreditkarte, üblicherweise eine 16stellige Nummer" #: src/lib/entry.py:419 msgid "Card type" msgstr "Kartenart" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Die Art der Kreditkarte, wie MasterCard oder VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV Nummer" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Zertifikat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Ein Zertifikat, wie beispielsweise ein X.509-SSL-Zertifikat" #: src/lib/entry.py:452 msgid "Code" msgstr "Code" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Ein Code, um Zugang zu etwas zu erhalten" #: src/lib/entry.py:464 msgid "A database name" msgstr "Ein Datenbank-Name" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domain" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Eine E-Mail-Adresse" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Ablaufdatum" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Der Monat, an dem die Kreditkartengültigkeit abläuft" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Schlüsseldatei" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Ort" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Ein physikalischer Ort, wie beispielsweise ein Büroeingang" #: src/lib/entry.py:540 msgid "Password" msgstr "Passwort" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Telefonnummer" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Eine Telefonnummer" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Portnummer" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Eine Netzwerk-Portnummer, um direkt auf Netzwerkdienste zuzugreifen" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Benutzername" #: src/lib/entry.py:596 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:37 msgid "_Continue" msgstr "_Fortsetzen" #: src/lib/ui.py:42 msgid "_Generate" msgstr "Erzeu_gen" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Eintrag hinzufügen" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Ordner hinzufügen" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Ändern" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Neu laden" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Ersetzen" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Entsperren" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Aktualisieren" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Passwort kopieren" #: src/lib/ui.py:432 msgid "Select File" msgstr "Datei auswählen" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Durchsuchen …" #: src/lib/ui.py:569 msgid "Generate" msgstr "Erzeugen" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notizen:" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Vor %s aktualisiert" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Beliebige Art" #: src/lib/util.py:56 msgid "is too short" msgstr "ist zu kurz" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "ist nicht abwechslungsreich genug" #: src/lib/util.py:89 msgid "is too weak" msgstr "ist zu schwach" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "ist ein Palindrom" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i Sekunden" #: src/lib/util.py:318 msgid "years" msgstr "Jahre" #: src/lib/util.py:318 msgid "year" msgstr "Jahr" #: src/lib/util.py:326 msgid "months" msgstr "Monate" #: src/lib/util.py:326 msgid "month" msgstr "Monat" #: src/lib/util.py:330 msgid "weeks" msgstr "Wochen" #: src/lib/util.py:330 msgid "week" msgstr "Woche" #: src/lib/util.py:334 msgid "days" msgstr "Tage" #: src/lib/util.py:334 msgid "day" msgstr "Tag" #: src/lib/util.py:338 msgid "hours" msgstr "Stunden" #: src/lib/util.py:338 msgid "hour" msgstr "Stunde" #: src/lib/util.py:342 msgid "minute" msgstr "Minute" #: src/lib/util.py:346 msgid "seconds" msgstr "Sekunden" #: src/lib/util.py:346 msgid "second" msgstr "Sekunde" #: src/revelation.py:89 msgid "Missing data files" msgstr "Datendateien fehlen" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Konfigurationsdaten fehlen" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Ungültige Datendateien" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Neue Datei" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Rückgängig: %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Wiederherstellen: %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Öffnen abgebrochen" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Altes Dateiformat" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Öffnen fehlgeschlagen" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Ungültiges Dateiformat" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Die Datei »%s« enthält ungültige Daten." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Unbekannte Daten" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Unbekannte Datenversion" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Dateityp kann nicht erkannt werden" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Datei kann nicht geöffnet werden" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Der Eintrag hat kein Passwort zum Kopieren" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Das Passwort wurde in die Zwischenablage kopiert" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Einträge kopiert" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Einträge ausschneiden" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Einträge ausgeschnitten" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Einträge einfügen" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Einträge eingefügt" #: src/revelation.py:1186 msgid "Add entry" msgstr "Eintrag hinzufügen" #: src/revelation.py:1192 msgid "Entry added" msgstr "Eintrag hinzugefügt" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Eintrag hinzufügen abgebrochen" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Ordner bearbeiten" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Eintrag bearbeiten" #: src/revelation.py:1218 msgid "Update entry" msgstr "Eintrag aktualisieren" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Eintrag aktualisiert" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Eintrag bearbeiten abgebrochen" #: src/revelation.py:1251 msgid "Folder added" msgstr "Ordner hinzugefügt" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Ordner hinzufügen abgebrochen" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Kein aufzurufender Befehl für %s-Einträge gefunden" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Eintrag geöffnet" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Ungültiges Format für aufzurufenden Befehl" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Eintragsdaten fehlen" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Eintrag verschieben" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Einträge verschoben" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Eintrag entfernen" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Einträge entfernt" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Eintrag entfernen abgebrochen" #: src/revelation.py:1372 msgid "Password changed" msgstr "Passwort geändert" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Passwort ändern abgebrochen" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Daten nach %s exportiert" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Export abgebrochen" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Datei kann nicht geschrieben werden" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Export fehlgeschlagen" #: src/revelation.py:1435 msgid "Import data" msgstr "Daten importieren" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Daten von %s importiert" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Import abgebrochen" #: src/revelation.py:1474 msgid "Locked" msgstr "Gesperrt" #: src/revelation.py:1475 msgid "File locked" msgstr "Datei gesperrt" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Beenden wegen ungespeicherter Änderungen deaktiviert" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Datei entsperrt" #: src/revelation.py:1521 msgid "New file created" msgstr "Neue Datei erstellt" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Neue Datei abgebrochen" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Datei %s geöffnet" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Daten in Datei %s gespeichert" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Speichern abgebrochen" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Datei kann nicht gespeichert werden" #: src/revelation.py:1576 msgid "Save failed" msgstr "Speichern fehlgeschlagen" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Beenden abgebrochen" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s wiederhergestellt" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s rückgängig gemacht" #: src/revelation.py:1648 msgid "Preferences" msgstr "Einstellungen" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: das »%« Zeichen" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: optionale Ersetzungsvariable" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): optionale Teilzeichenkettenersetzung" revelation-revelation-0.5.6/po/es.po000066400000000000000000001533761510620476600174530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Mikel Olasagasti Uranga , 2012,2020\n" "Language-Team: Spanish (http://app.transifex.com/revelation/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=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Gestor de contraseñas" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "Gestor de contraseñas" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Entre otras funcionalidades Revelation es capaz de:" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "Guardar contraseñas de manera cifrada" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "Guardar contraseñas de manera organizada" #: data/info.olasagasti.revelation.metainfo.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.metainfo.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.metainfo.xml.in:29 msgid "A simple user interface" msgstr "Una interfaz de usuario simple" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Buscar entradas con distintos criterios" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "Ventana de atajos de teclado" #: data/info.olasagasti.revelation.metainfo.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.metainfo.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/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "El nombre de la entrada" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Una descripción para la entrada" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Tipo de entrada" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notas" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Carpeta" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "El nombre de la carpeta" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Una descripción de la carpeta" #: 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Abrir" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Guardar" #: 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:46 msgid "_Lock" msgstr "_Bloquear" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importar" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exportar" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Cerrar" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Salir" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Editar" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Deshacer" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Rehacer" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Eli_minar" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Ir a" #: 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" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Comprobador de contraseñas" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Introduce una contraseña para comprobar" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "El resultado de la comprobación" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Generador de contraseñas" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "La contraseña generada" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Usar signos de puntuación en las contraseñas" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Cuando las contraseñas son generadas, usar caracteres de puntuación como %, =, { o ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Acción de doble click" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Ir a la cuenta, si es posible" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Editar cuenta" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Editar cuenta con doble click" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Copiar contraseña al portapapeles" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia la contraseña de la cuenta al portapapeles al hacer doble click" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Ficheros" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Abrir fichero al inicio:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Seleccionar fichero para abrir automáticamente" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Fichero a abrir cuando arranca Revelation" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Salvar datos automáticamente cuando cambian" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Bloquear el fichero cuando esté inactivo durante" #: data/ui/preferences-files.ui:66 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" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "El periodo de inactividad antes de bloquear el fichero, en minutos" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutos" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Contraseñas" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Muestra las contraseñas y otros secretos" #: data/ui/preferences-passwords.ui:21 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 *******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Copiar también el nombre de usuario al copiar la contraseña" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Estilo de la barra de herramientas" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Usar el por defecto del escritorio" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Mostrar objetos de la barra de herramientas con el formato por defecto" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Mostrar iconos y texto" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Mostrar objetos de la barra de herramientas con ambos iconos y texto" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Mostrar iconos y texto importante" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Mostrar entradas de la barra de herramientas con texto al lado de iconos importantes" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Mostrar solo iconos" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Mostrar entradas de la barra de herramientas con solo iconos" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Mostrar solo texto" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Mostrar entradas de la barra de herramientas con solo texto" #: data/ui/preferences.ui:17 msgid "General" msgstr "General" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interfaz" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Comandos" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Texto a buscar" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Encontrar la coincidencia anterior" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Encontrar la coincidencia siguiente" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Abre un fichero" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Guarda los datos en un fichero" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Añadir entrada" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Crea una nueva entrada" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Añadir carpeta" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Crea una nueva carpeta" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Ir a las entradas seleccionadas\t" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Edita la entrada seleccionada" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Elimina las entradas seleccionadas" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Lista de cuentas de Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Lista de cuentas" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Creado:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Versión de Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "El fichero ha cambiado" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Descartar" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "¿Guardar cambios en el fichero actual?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "¿Salvar cambios antes de abrir?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "¿Salvar cambios antes de salir?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "¿Salvar cambios antes de cerrar?" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "¿Reemplazar el fichero existente?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "¿Guardar en fichero no seguro?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Seleccione fichero al que exportar" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Tipo de fichero" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Seleccione fichero para importar" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Detectar automáticamente" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Seleccione fichero para abrir" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Ficheros Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Todos los ficheros" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Seleccione fichero para guardar en" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Introduzca nueva contraseña" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Contraseña incorrecta" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Las contraseñas no coinciden" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "¿Usar una contraseña insegura?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Introduzca la contraseña para desbloquear el fichero" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Introduzca la contraseña del fichero" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Introduzca contraseña para el fichero" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Las contraseñas introducidas no coinciden" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "No se ha introducido una contraseña" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Datos de la cuenta" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notas para la entrada" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "No se ha introducido nombre" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Debe introducir un nombre para la cuenta" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "¿Borrar realmente las %i entradas seleccionadas?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "¿Borrar realmente la carpeta '%s'?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "¿Borrar realmente la cuenta '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Por favor confirme que desea borrar esta cuenta." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Debe introducir un nombre para esta carpeta" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Un gestor de contraseñas para el escritorio GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Error desconocido" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "La contraseña parece buena" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "La contraseña %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Tarjeta de crédito" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Llave cifrada" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Base de datos" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Cerradura" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Correo electrónico" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Genérico" #: src/lib/entry.py:289 msgid "Phone" msgstr "Teléfono" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Escritorio remoto" #: src/lib/entry.py:338 msgid "Website" msgstr "Sitio web" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Número de tarjeta" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Tipo de tarjeta" #: src/lib/entry.py:420 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:430 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificado" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificado, como el Certificado X.509 SSL" #: src/lib/entry.py:452 msgid "Code" msgstr "Código" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Un código usado para dar acceso a algo" #: src/lib/entry.py:464 msgid "A database name" msgstr "Nombre de la base de datos" #: src/lib/entry.py:474 msgid "Domain" msgstr "Dominio" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Una dirección de correo electrónico" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Fecha de caducidad" #: src/lib/entry.py:497 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:507 msgid "Hostname" msgstr "Nombre de host" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Fichero de claves" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Lugar" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Un lugar físico, como la entrada de la oficina" #: src/lib/entry.py:540 msgid "Password" msgstr "Contraseña" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Número de teléfono" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Un número de teléfono" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Número de puerto" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Nombre de usuario" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Un nombre u otra identificación usada para identificarse" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Continuar" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Generar" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Añadir entrada" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Añadir carpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Cambiar" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Recargar" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Reemplazar" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Desbloquear" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Actualizar" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Copiar contraseña" #: src/lib/ui.py:432 msgid "Select File" msgstr "Seleccionar fichero" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Explorar..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Generar" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notas: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Actualizado hace %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Cualquier tipo" #: src/lib/util.py:56 msgid "is too short" msgstr "es demasiado corta" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "no es lo suficientemente variado" #: src/lib/util.py:89 msgid "is too weak" msgstr "es demasiado débil" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "es un palíndromo" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i segundos" #: src/lib/util.py:318 msgid "years" msgstr "años" #: src/lib/util.py:318 msgid "year" msgstr "año" #: src/lib/util.py:326 msgid "months" msgstr "meses" #: src/lib/util.py:326 msgid "month" msgstr "mes" #: src/lib/util.py:330 msgid "weeks" msgstr "semanas" #: src/lib/util.py:330 msgid "week" msgstr "semana" #: src/lib/util.py:334 msgid "days" msgstr "días" #: src/lib/util.py:334 msgid "day" msgstr "día" #: src/lib/util.py:338 msgid "hours" msgstr "horas" #: src/lib/util.py:338 msgid "hour" msgstr "hora" #: src/lib/util.py:342 msgid "minute" msgstr "minuto" #: src/lib/util.py:346 msgid "seconds" msgstr "segundos" #: src/lib/util.py:346 msgid "second" msgstr "segundo" #: src/revelation.py:89 msgid "Missing data files" msgstr "Faltan ficheros de datos" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Faltan datos de configuración" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Ficheros de datos inválidos" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Fichero nuevo" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Deshacer %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Rehacer %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Abrir cancelado" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "Coincidencia encontrada para “%s”" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "Ninguna coincidencia encontrada para “%s”" #: src/revelation.py:1041 msgid "Old file format" msgstr "Formato de fichero antiguo" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Fallo al abrir" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Formato de fichero invalido" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "El fichero '%s' contiene datos invalidos." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Datos desconocidos" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Versión de datos desconocida" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "No se ha podido detectar el tipo de fichero" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "No se ha podido abrir el fichero" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "La entrada no tiene contraseñas para copiar" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Contraseña copiada al portapapeles" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Entradas copiadas" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Cortar entradas" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Entradas cortadas" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Pegar entradas" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Entradas pegadas" #: src/revelation.py:1186 msgid "Add entry" msgstr "Añadir entrada" #: src/revelation.py:1192 msgid "Entry added" msgstr "Entrada añadida" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Anulado añadir entrada" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Editar carpeta" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Editar entrada" #: src/revelation.py:1218 msgid "Update entry" msgstr "Actualizar entrada" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Entrada actualizada" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Anulado editar entrada" #: src/revelation.py:1251 msgid "Folder added" msgstr "Carpeta añadida" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Anulado añadir carpeta" #: src/revelation.py:1267 #, 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:1290 msgid "Entry opened" msgstr "Entrada abierta" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Formato inválido de comando" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Faltan datos en la entrada" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Mover entrada" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Entradas movidas" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Eliminar entrada" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Entradas eliminadas" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Anulado el borrado de entrada" #: src/revelation.py:1372 msgid "Password changed" msgstr "Contraseña cambiada" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Cambio de contraseña cancelada" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "Fichero cerrado %s" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "Anulado cerrar fichero" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Datos exportados a %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Anulado exportar" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "No se pudo escribir en el fichero" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "La exportación ha fallado" #: src/revelation.py:1435 msgid "Import data" msgstr "Importar datos" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Datos importados desde %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Anulada la importación" #: src/revelation.py:1474 msgid "Locked" msgstr "Bloqueado" #: src/revelation.py:1475 msgid "File locked" msgstr "Fichero bloqueado" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Salir desactivado debido a cambios sin salvar" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Fichero desbloqueado" #: src/revelation.py:1521 msgid "New file created" msgstr "Nuevo fichero creado" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Anulado nuevo fichero" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Abierto fichero %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Datos salvados al fichero %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Guardado cancelado" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "No se pudo salvar el fichero" #: src/revelation.py:1576 msgid "Save failed" msgstr "Guardado fallido" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Anulado salir" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s rehecho" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s deshecho" #: src/revelation.py:1648 msgid "Preferences" msgstr "Preferencias" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: el símbolo \"%\"" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: variable de expansión opcional" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): subtexto de expansión opcional" revelation-revelation-0.5.6/po/et.po000066400000000000000000001315741510620476600174500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Rivo Zängov , 2011-2012\n" "Language-Team: Estonian (http://app.transifex.com/revelation/revelation/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Paroolide haldaja" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Sissekande nimi" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Sissekande kirjeldus" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Sissekande tüüp" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Märkused" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Kaust" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Kausta nimi" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Kausta kirjeldus" #: data/ui/help-overlay.ui:13 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 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 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 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 "_Fail" #: data/ui/menubar.ui:8 msgid "_New" msgstr "Uus" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "Ava" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Salvesta" #: 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:46 msgid "_Lock" msgstr "_Lukusta" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Impordi" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Ekspordi" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "Sulge" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "Välju" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "Muuda" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "Samm tagasi" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "Samm edasi" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Eemalda" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Parooli kontrollija" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Sisesta parool, mida kontrollida" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Tulemus, mida kontrollida" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Parooli looja" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Loodud parool" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Kui võimalik, siis mine kontole" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Muuda kontot" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Failid" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Ava käivitades fail:" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutit" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Parool" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Tööriistariba stiil" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Kasuta töölaua vaikeväärtust" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Näita ainult ikoone" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Näita tööriistaribal ainult kirjete ikoone" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Näita ainult teksti" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "Üldine" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Kasutajaliides" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Ava fail" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Salvesta andmed faili" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Lisa sissekanne" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Loo uus sissekanne" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Lisa kaust" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Loo uus kaust" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Mine valitud sissekannetele" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Muuda valitud sissekannet" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation kontode nimekiri" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Kontode nimekiri" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Loodud:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelationi versioon:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Faili on muudetud" #: src/lib/dialog.py:223 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "" #: src/lib/dialog.py:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Salvestada muudatused praeguses failis?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Salvestada muudatused enne lõpetamist?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Asendada olemasolev fail?" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "Salvestada ebaturvalisse faili?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Failitüüp" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Vali fail, mida importida" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Tuvasta automaatselt" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Vali fail, mida avada" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelationi failid" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Kõik failid" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Sisesta uus parool" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Vale parool" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Paroolid ei kattu" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Kasutada ebaturvalist parooli?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:649 msgid "Enter password to unlock file" msgstr "Sisesta faili avamiseks parool" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Sisesta faili parool" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Sisesta faili jaoks parool" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Sinu poolt sisestatud paroolid ei kattu." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Parooli pole sisestatud" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "" #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Konto andmed" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Sissekande märkused" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nime pole sisestatud" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Sa pead sisestama konto jaoks nime" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Kas tõepoolest eemaldada %i valitud kirjet?" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Kas tõesti eemaldada kaust '%s'?" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Sa pead sisestama kausta nime" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "GNOME töölaua paroolihaldur" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Tundmatu tõrge" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Parool näib olevat hea" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Parool %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Krediitkaart" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Krüpto võti" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Andmebaas" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Ukselukk" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "E-post" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Üldine" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Kaugtöölaud" #: src/lib/entry.py:338 msgid "Website" msgstr "Veebisait" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kaardi number" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "" #: src/lib/entry.py:419 msgid "Card type" msgstr "Kaardi tüüp" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV number" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "" #: src/lib/entry.py:441 msgid "Certificate" msgstr "Sertifikaat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "" #: src/lib/entry.py:452 msgid "Code" msgstr "Kood" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:464 msgid "A database name" msgstr "Andmebaasi nimi" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domeen" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:486 msgid "An email address" msgstr "E-posti aadress" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Aegumise kuupäev" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Hostinimi" #: src/lib/entry.py:508 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" #: src/lib/entry.py:518 msgid "Key File" msgstr "Võtmefail" #: src/lib/entry.py:519 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:529 msgid "Location" msgstr "Asukoht" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "" #: src/lib/entry.py:540 msgid "Password" msgstr "Parool" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:551 msgid "Phone number" msgstr "Telefoni number" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Telefoni number" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:573 msgid "Port number" msgstr "Pordi number" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" #: src/lib/entry.py:595 msgid "Username" msgstr "Kasutajanimi" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:37 msgid "_Continue" msgstr "Jätka" #: src/lib/ui.py:42 msgid "_Generate" msgstr "Loo" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "Lis_a sissekanne" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "Lis_a kaust" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "Muuda" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "Lae uuesti" #: src/lib/ui.py:56 msgid "_Replace" msgstr "Asenda" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "Ava" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Uuenda" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Kopeeri parool" #: src/lib/ui.py:432 msgid "Select File" msgstr "Vali fail" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Sirvi..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Loo" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Märkused: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Uuendatud %s tagasi" #: src/lib/ui.py:1212 msgid "Any type" msgstr "" #: src/lib/util.py:56 msgid "is too short" msgstr "on liiga lühike" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:89 msgid "is too weak" msgstr "on liiga nõrk" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekundit" #: src/lib/util.py:318 msgid "years" msgstr "aastat" #: src/lib/util.py:318 msgid "year" msgstr "aasta" #: src/lib/util.py:326 msgid "months" msgstr "kuud" #: src/lib/util.py:326 msgid "month" msgstr "kuu" #: src/lib/util.py:330 msgid "weeks" msgstr "nädalat" #: src/lib/util.py:330 msgid "week" msgstr "nädal" #: src/lib/util.py:334 msgid "days" msgstr "päeva" #: src/lib/util.py:334 msgid "day" msgstr "päev" #: src/lib/util.py:338 msgid "hours" msgstr "tundi" #: src/lib/util.py:338 msgid "hour" msgstr "tund" #: src/lib/util.py:342 msgid "minute" msgstr "minut" #: src/lib/util.py:346 msgid "seconds" msgstr "sekundit" #: src/lib/util.py:346 msgid "second" msgstr "sekund" #: src/revelation.py:89 msgid "Missing data files" msgstr "Puuduvad andmefailid" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "Puuduvad seadistuste andmed" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:97 msgid "Invalid data files" msgstr "Vigased andmefailid" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:580 msgid "New file" msgstr "Uus fail" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Avamine on tühistatud" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Avamine ebaõnnestus" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Vigane failivorming" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1057 msgid "Unknown data" msgstr "Tundmatud andmed" #: src/revelation.py:1057 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1061 msgid "Unknown data version" msgstr "Tundmatu andme versioon" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "Failitüübi tuvastamine ebaõnnestus" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Faili avamine ebaõnnestus" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Sissekandel pole parooli, mida kopeerida" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Sissekanded on kopeeritud" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Lõika sissekanded" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Sissekanne on lõigatud" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Aseta sissekanded" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Sissekanded on asetatud" #: src/revelation.py:1186 msgid "Add entry" msgstr "Lisa sissekanne" #: src/revelation.py:1192 msgid "Entry added" msgstr "Sissekanne on lisatud" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Sissekande lisamine ebaõnnestus" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Muuda sissekannet" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Muuda sissekannet" #: src/revelation.py:1218 msgid "Update entry" msgstr "Uuenda sissekannet" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Sissekanne on uuendatud" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Sissekande muutmine on tühistatud" #: src/revelation.py:1251 msgid "Folder added" msgstr "Kaust on lisatud" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Kausta lisamine on tühistatud" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Sissekanne on avatud" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "Liiguta sissekannet" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Sissekanded on liigutatud" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Eemalda sissekanne" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Sissekanded on eemaldatud" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Sissekande eemaldamine tühistati" #: src/revelation.py:1372 msgid "Password changed" msgstr "Parool on tühistatud" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Parooli muutmine tühistati" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Eksportimine on tühistatud" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "" #: src/revelation.py:1435 msgid "Import data" msgstr "Impordi andmed" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Importimine on tühistatud" #: src/revelation.py:1474 msgid "Locked" msgstr "Lukustatud" #: src/revelation.py:1475 msgid "File locked" msgstr "Fail on lukustatud" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Fail on avatud" #: src/revelation.py:1521 msgid "New file created" msgstr "Uus fail on loodud" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Uue faili loomine on tühistatud" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Andmed salvestatud faili %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Salvestamine on tühistatud" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "" #: src/revelation.py:1576 msgid "Save failed" msgstr "Salvestamine ebaõnnestus" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Väljumine on tühistatud" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "Eelistused" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/eu.po000066400000000000000000001514411510620476600174440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: # Mikel Olasagasti Uranga , 2011 # Mikel Olasagasti Uranga , 2012,2020,2025 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Mikel Olasagasti Uranga , 2012,2020,2025\n" "Language-Team: Basque (http://app.transifex.com/revelation/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" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Pasahitz kudeatzailea" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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 "Sortutako pasahitzen luzeera" #: 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 "Erabili puntuazio karaktereak pasahitzentzat" #: 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 "Erakutsi pasahitzak" #: 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "Pasahitz kudeatzailea" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Besteak beste, Revelation-ek ondorengoak egin ditzake:" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "Pasahitzak zifratuta gorde" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "Pasahitzak antolatuta gorde" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "Esportatu datuak fitxategi formatu ezberdin batera" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "Erabiltzaile-interfaze erraza" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "Hainbat sarrera moeta pasahitzak gordetzeko" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Bilatu sarrerak hainbat irizpideren arabera" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "Laster-tekla leihoa" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "Egokitu aplikazioa zure beharretara" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "Ezkutatu edukia aplikazioa denbora batez erabiltzen ez denean" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "Revelation-en webgunea:" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "Sarrera" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "Izena:" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Sarreraren izena" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "Deskribapena:" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Sarreraren deskribapena" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "Moeta" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Sarrera moeta" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Oharrak" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Karpeta" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Karpetaren izena" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Karpetaren deskribapena" #: 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Ireki" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Gorde" #: 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:46 msgid "_Lock" msgstr "_Blokeatu" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "I_nportatu" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exportatu" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Itxi" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Irten" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Editatu" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Desegin" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Berregin" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "_Kendu" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "J_oan" #: 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" #: data/ui/message.ui:22 msgid "Message" msgstr "Mezua" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "Uneko pasahitza:" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "Pasahitz berria:" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "Baieztatu pasahitza:" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Pasahitz egiaztatzailea" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "Pasahitza:" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Aukeratu pasahitz bat egiaztatzeko" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Egiaztatzearen emaitza" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Pasahitz sortzailea" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Sortutako pasahitza" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "Luzeera:" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Sortutako pasahitzen karaktere kopurua - 8 edo gehiago aholkatzen da" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Erabili puntuazio karaktereak pasahitzentzat" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Pasahitzak sortzerakoan erabili puntuazio karaktereak %, =, { edo . bezala." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Klik bikoitzaren ekintza" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Joan kontura, posible bada" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Editatu kontua" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Editatu kontua klik bikoitzean" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Kopiatu pasahitza arbelera" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiatu kontuaren pasahitza arbelera klik bikoitzean" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Fitxategiak" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Ireki fitxategia abiaraztean" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "Gaituta dagoenean fitxategi hau irekiko da aplikazioa abiaraztean" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Aukeratu fitxategia automatikoki ireki dadin" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Revelation abiarazten denean ireki beharreko fitxategia" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Automatikoki gorde datuak aldaketaren bat dagoenean" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Ekintzarik gabe egon ostean zenbat minutura blokeatu fitxategia" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatikoki blokeatu fitxategia denbora batez aktibitaterik ez denean" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Aktibitaterik gabeko denbora tartea minututan" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutu" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Pasahitzak" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Bistaratu pasahitzak eta beste zenbait sekretu" #: data/ui/preferences-passwords.ui:21 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)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Kopiatu erabiltzaile izena ere pasahitzak kopiatzean" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Tresna barraren estiloa" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Erabili mahai-gaineko lehenetsia" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Erakutsi tresna barrako elementuak lehenetsitako estiloarekin" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Erakutsi ikonoak eta testuak" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Erakutsi tresna barrako elementuak ikono eta testuarekin" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Erakutsi ikonoak eta testu garrantzitsuak" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Erakutsi tresna-barrako elementuak testuarekin eta ikono garrantzitsuen ondoan" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Erakutsi ikonoak soilik" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Erakutsi tresna-barrako elementuak ikonoekin soilik" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Erakutsi testua soilik" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Erakutsi tresna-barrako elementuak testuarekin soilik" #: data/ui/preferences.ui:17 msgid "General" msgstr "Orokorra" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interfazea" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Joan komandoak" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Bilatu beharreko testua" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Bilatu aurreko parekatzea" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Bilatu hurrengoa parekatzea" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Ireki fitxategi bat" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Gorde datuak fitxategi batera" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Gehitu sarrera" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Sarrera berri bat sortu" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Gehitu karpeta" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Karpetaren berri bat sortu" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Joan aukeratutako sarreretara" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Editatu hautatutako sarerra" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Ezabatu hautatutako sarrerak" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation kontu zerrenda" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Kontu zerrenda" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Sortze data:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation bertsioa:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "_Ados" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Fitxategia aldatu da" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "_Utzi" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Baztertu" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Gorde aldaketak uneko fitxategian?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Gorde aldaketak ireki aurretik?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Gorde aldaketak irten aurretik?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "Gorde aldaketak itxi aurretik?" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Ordeztu lehenedik existitzen den fitxategia?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Gorde fitxategi ez seguruan?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Aukeratu esportatu beharreko fitxategia" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Fitxategi mota" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Aukeratu inportatu beharreko fitxategia" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Atzeman automatikoki" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Aukeratu fitxategi bat irekitzeko" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation fitxategiak" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Fitxategi guztiak" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Aukeratu gordetzeko fitxategia" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Sartu pasahitz berria" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Pasahitz okerra" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Pasahitzak ez datoz bat" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Pasahitz ez segurua erabili?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Sartu pasahitza fitxategia desblokeatzeko" #: src/lib/dialog.py:650 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:689 msgid "The password you entered was not correct, please try again." msgstr "Sartu duzun pasahitza ez da zuzena, saiatu berriz." #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Sartu fitxategiaren pasahitza" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Sartu pasahitza fitxategiarentzat" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Sartu dituzun pasahitzak ez dagoz bat." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Ez da pasahitzik sartu" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "Pasahitz bat sartu behar duzu fitxategi berriarentzat." #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Kontuaren datuak" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Sarreraren oharrak" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Ez da izenik sartu" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Kontuarentzat izen bat sartu behar duzu" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Aukeratutako %i sarrerak ezabatu nahi dituzu?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "'%s' karpeta ezabatu?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "'%s' kontua ezabatu?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Konfiruamtu kontu hau ezabatu nahi duzula." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "_Ezabatu" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Karpetarentzat izen bat sartu behar da" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "GNOME mahaigainerako pasahitz kudeatzailea" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Errore ezezaguna" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Pasahitzak ona dirudi" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "%s pasahitza" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kreditu txartela" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Kripto-giltza" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Datubasea" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Sarraila" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Posta elektronikoa" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Orokorra" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefonoa" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Urruneko mahaigaina" #: src/lib/entry.py:338 msgid "Website" msgstr "Webgunea" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Txartel zenbakia" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Kreditu txartelaren zenbakia, normalean 16 digitoduna" #: src/lib/entry.py:419 msgid "Card type" msgstr "Txartel moeta" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Txartel moeta, MasterCard edo VISA adibidez" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV zenbakia" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Zertifikatua" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Zertifikatu bat, X.509 SSL zertifikatu bat adibidez" #: src/lib/entry.py:452 msgid "Code" msgstr "Kodea" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Nonbaitera sarrera ematen duen kodea" #: src/lib/entry.py:464 msgid "A database name" msgstr "Datubase izena" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domeinua" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Posta elektroniko helbide bat" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Iraungitze data" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Kreditu txartelaren iraungitze hilabetea" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Ostalari izena" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Gako fitxategia" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Kokapena" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Kokapen fisikoa, bulego sarrera adibidez" #: src/lib/entry.py:540 msgid "Password" msgstr "Pasahitza" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Telefono zenbakia" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Telefono zenbaki bat" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Ataka zenbakia" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Sareko ataka bat, sareko zerbitzuetara zuzenean sartzeko" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL bat, webgune baten helbidea adibidez" #: src/lib/entry.py:595 msgid "Username" msgstr "Erabiltzaile izena" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Izen bat edo beste edozein identifikazio zu zeu identifikatzeko" #: src/lib/ui.py:37 msgid "_Continue" msgstr "Ja_rraitu" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Sortu" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Gehitu sarrera" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Gehitu karpeta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Aldatu" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Berritu" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Ordeztu" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Desblokeatu" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Eguneratu" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Kopiatu pasahitza" #: src/lib/ui.py:432 msgid "Select File" msgstr "Aukeratu fitxategia" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Arakatu..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Sortu" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Oharrak: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Orain %s eguneratua" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Edozen moeta" #: src/lib/util.py:56 msgid "is too short" msgstr "Motzegia da" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "Ez du aldakortasun nahikoa" #: src/lib/util.py:89 msgid "is too weak" msgstr "Ahulegia da" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "Palindromoa da" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i segundu" #: src/lib/util.py:318 msgid "years" msgstr "urte" #: src/lib/util.py:318 msgid "year" msgstr "urte" #: src/lib/util.py:326 msgid "months" msgstr "hilabete" #: src/lib/util.py:326 msgid "month" msgstr "hilabete" #: src/lib/util.py:330 msgid "weeks" msgstr "aste" #: src/lib/util.py:330 msgid "week" msgstr "aste" #: src/lib/util.py:334 msgid "days" msgstr "egun" #: src/lib/util.py:334 msgid "day" msgstr "egun" #: src/lib/util.py:338 msgid "hours" msgstr "ordu" #: src/lib/util.py:338 msgid "hour" msgstr "ordu" #: src/lib/util.py:342 msgid "minute" msgstr "minutu" #: src/lib/util.py:346 msgid "seconds" msgstr "segundu" #: src/lib/util.py:346 msgid "second" msgstr "segundu" #: src/revelation.py:89 msgid "Missing data files" msgstr "Datu fitxategiak falta dira" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Konfigurazio datuak falta dira" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Baliogabeko datu fitxategiak" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Fitxategi berria" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Desegin %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Berregin %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Irekitzea bertan behera utzi da" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "Parekatzea aurkitu da “%s”-(r)entzat" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "Ez da parekatzerik aurkitu “%s”-(r)entzat" #: src/revelation.py:1041 msgid "Old file format" msgstr "Fitxategi formatu zaharra" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Irekitzeak huts egin du" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Formatu baliogabea" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "'%s' fitxategiak baliogabeko datuak ditu." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Datu ezezagunak" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Datu bertsio ezezaguna" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Ezin da fitxategi mota atzeman" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Ezin da fitxategia ireki" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Sarrerak ez du pasahitzik kopiatzeko" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Pasahitzak arbelera kopiatuta" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Sarrerak kopiatuta" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Sarrerak moztu" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Sarrerak moztuta" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Sarrerak itsatsi" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Sarrerak itsatsi dira" #: src/revelation.py:1186 msgid "Add entry" msgstr "Gehitu sarrera" #: src/revelation.py:1192 msgid "Entry added" msgstr "Sarrera gehituta" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Sarrera gehitzea ezeztatua" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Editatu karpeta" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Editatu sarrera" #: src/revelation.py:1218 msgid "Update entry" msgstr "Eguneratu sarrera" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Sarrera eguneratuta" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Sarrera gehitzea ezeztatua" #: src/revelation.py:1251 msgid "Folder added" msgstr "Karpeta gehituta" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Karpeta gehitzea ezeztatua" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Ez da joan komandorik aurkitu %s sarrerentzat" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Sarrera irekita" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Baliogabeko joan komando formatua" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Sarrera datuak falta dira" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Mugitu sarrera" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Sarrerak mugituta" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Kendu sarrera" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Sarrerak kenduta" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Sarrera kentzea ezeztatuta" #: src/revelation.py:1372 msgid "Password changed" msgstr "Pasahitza aldatu da" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Pasahitz aldatzea ezeztatuta" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "%s fitxategia itxi da" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "Fitxategia ixtea ezeztatua" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Datuak %s-(r)a esportatu dira" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Esportazioa ezatatuta" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Ezin da fitxategian idatzi" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Esportazioak huts egin du" #: src/revelation.py:1435 msgid "Import data" msgstr "Inportatu datuak" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Datuak %s-(t)ik inportatu dira" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Inportazioa ezeztatuta" #: src/revelation.py:1474 msgid "Locked" msgstr "Blokeatuta" #: src/revelation.py:1475 msgid "File locked" msgstr "Fitxategia blokeatuta" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Irtetzea ezgaitua gorde gabeko aldaketengatik" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Fitxategia desblokeatuta" #: src/revelation.py:1521 msgid "New file created" msgstr "Fitxategi berria sortuta" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Fitxategi berria sortzea ezeztatuta" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "%s fitxategia ireki da" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Datuak %s fitxategian gorde dira" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Gordetzea ezeztatuta" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Ezin da fitxategian gorde" #: src/revelation.py:1576 msgid "Save failed" msgstr "Gordetzeak huts egin du" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Irtetea ezeztatuta" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s berreginda" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s deseginda" #: src/revelation.py:1648 msgid "Preferences" msgstr "Hobespenak" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: \"%\" sinboloa" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: aukerazko aldagai luzagarria " #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): aukerazko substring luzagarria" revelation-revelation-0.5.6/po/fi.po000066400000000000000000001327641510620476600174400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Finnish (http://app.transifex.com/revelation/revelation/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Kohdan nimi" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Kohdan kuvaus" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Kohdan tyyppi" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Kansio" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Kansion nimi" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Kansion kuvaus" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Lukitse" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Tuo" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Vie" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Muokkaa" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "_Poista" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Siirry" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Salasanan tarkistaja" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Syötä tarkistettava salasana" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Tarkistuksen tulos" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Salasanageneraattori" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Generoitu salasana" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minuuttia" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Etsittävä teksti" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Etsi edellinen osuma" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Etsi seuraava osuma" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelationin tililista" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Lista tileistä" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Luotu" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelationin versio:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Tiedosto on muuttunut" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Hylkää" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Tallennetaanko muutokset nykyiseen tiedostoon?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Tallennetaanko muutokset ennen avaamista?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Tallennetaanko muutokset ennen sulkemista?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Korvaa olemassaoleva tiedosto?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Tallennetaanko turvattomaan tiedostoon?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Valitse vietävä tiedosto" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Tiedostotyyppi" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Valitse tuotava tiedosto" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Automaattisesti tunnistettu" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Valitse avattava tiedosto" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelationin salasanat" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Kaikki tiedostot" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Valitse tiedosto johon tallennetaan" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Syötä salasana" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Väärä salasana" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Salasanat eivät täsmää" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Syötetyt salasanat eivät täsmää." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Käytetäänkö turvatonta salasanaa?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Avaa tiedoston lukitus syöttämällä salasana" #: src/lib/dialog.py:650 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:689 msgid "The password you entered was not correct, please try again." msgstr "Antamasi salasana ei ole oikein, yritä uudestaan." #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Anna tiedoston salasana" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Syötä tiedoston salasana" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Syöttämäsi salasanat eivät täsmää." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Salasanaa ei annettu" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "Uudelle tiedostolle täytyy antaa salasana." #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Tilin tiedot" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nimeä ei annettu" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Tilin nimi täytyy antaa" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Poistetaanko todella %i valittua kohtaa?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Poistetaanko todella kansio \"%s\"?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Poistetaanko todella tili \"%s\"?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Vahvista, että haluat poistaa tämän tilin." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Kansion nimi täytyy syöttää" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Salasanojen hallintaohjelma Gnomelle" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Tuntematon virhe" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Salasana vaikuttaa kelvolliselta" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Salasana %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Luottokortti" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Salausavain" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Tietokanta" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Ovikoodi" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Sähköposti" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Yleinen" #: src/lib/entry.py:289 msgid "Phone" msgstr "Puhelin" #: src/lib/entry.py:304 msgid "Shell" msgstr "Komentotulkki" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:338 msgid "Website" msgstr "WWW-sivu" #: src/lib/entry.py:355 msgid "VNC" msgstr "" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kortin numero" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Luottokortin numero, yleensä 16-merkkinen numero" #: src/lib/entry.py:419 msgid "Card type" msgstr "Kortin tyyppi" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Luottokortin tyyppi, esimerkiksi MasterCard tai Visa" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV-numero" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Varmenne" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Varmenne, esimerkiksi X.509 SSL-varmenne" #: src/lib/entry.py:452 msgid "Code" msgstr "Koodi" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Koodi, jonka avulla saadaan pääsy jonnekin" #: src/lib/entry.py:464 msgid "A database name" msgstr "Tietokannan nimi" #: src/lib/entry.py:474 msgid "Domain" msgstr "Toimialue" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Sähköpostiosoite" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Vanhenemispäivä" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Kuukausi, jolloin luottokortti vanhenee" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Verkkonimi" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Avaintiedosto" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Sijainti" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Fyysinen sijainti, kuten toimiston ovi" #: src/lib/entry.py:540 msgid "Password" msgstr "Salasana" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Puhelinnumero" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Puhelinnumero" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN-koodi" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Porttinumero" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Porttinumero verkkopalveluiden käyttöön suoraan" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "URL-sijainti, kuten WWW-sivun osoite" #: src/lib/entry.py:595 msgid "Username" msgstr "Käyttäjätunnus" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Nimi tai muu tunniste itsellesi" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Jatka" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Luo" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "Lisää _salasana" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "Lisää _kansio" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Muuta" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "Lataa _uudestaan" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Korvaa" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Avaa lukitus" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Päivitä" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Kopioi salasana" #: src/lib/ui.py:432 msgid "Select File" msgstr "Valitse tiedosto" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Selaa..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Luo" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Päivitetty %s sitten" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Mikä tahansa tyyppi" #: src/lib/util.py:56 msgid "is too short" msgstr "on liian lyhyt" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "ei ole tarpeeksi vaihteleva" #: src/lib/util.py:89 msgid "is too weak" msgstr "on liian heikko" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "on palindromi" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekuntia" #: src/lib/util.py:318 msgid "years" msgstr "vuotta" #: src/lib/util.py:318 msgid "year" msgstr "vuosi" #: src/lib/util.py:326 msgid "months" msgstr "kuukautta" #: src/lib/util.py:326 msgid "month" msgstr "kuukausi" #: src/lib/util.py:330 msgid "weeks" msgstr "viikkoa" #: src/lib/util.py:330 msgid "week" msgstr "viikko" #: src/lib/util.py:334 msgid "days" msgstr "päivää" #: src/lib/util.py:334 msgid "day" msgstr "päivä" #: src/lib/util.py:338 msgid "hours" msgstr "tuntia" #: src/lib/util.py:338 msgid "hour" msgstr "tunti" #: src/lib/util.py:342 msgid "minute" msgstr "minuutti" #: src/lib/util.py:346 msgid "seconds" msgstr "sekuntia" #: src/lib/util.py:346 msgid "second" msgstr "sekunti" #: src/revelation.py:89 msgid "Missing data files" msgstr "" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:97 msgid "Invalid data files" msgstr "" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:580 msgid "New file" msgstr "" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1057 msgid "Unknown data" msgstr "" #: src/revelation.py:1057 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1061 msgid "Unknown data version" msgstr "" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1123 msgid "Entries copied" msgstr "" #: src/revelation.py:1144 msgid "Cut entries" msgstr "" #: src/revelation.py:1151 msgid "Entries cut" msgstr "" #: src/revelation.py:1165 msgid "Paste entries" msgstr "" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "" #: src/revelation.py:1186 msgid "Add entry" msgstr "" #: src/revelation.py:1192 msgid "Entry added" msgstr "" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "" #: src/revelation.py:1218 msgid "Update entry" msgstr "" #: src/revelation.py:1223 msgid "Entry updated" msgstr "" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1251 msgid "Folder added" msgstr "" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "" #: src/revelation.py:1324 msgid "Entries moved" msgstr "" #: src/revelation.py:1350 msgid "Remove entry" msgstr "" #: src/revelation.py:1356 msgid "Entries removed" msgstr "" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "" #: src/revelation.py:1435 msgid "Import data" msgstr "" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "" #: src/revelation.py:1474 msgid "Locked" msgstr "" #: src/revelation.py:1475 msgid "File locked" msgstr "" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1500 msgid "File unlocked" msgstr "" #: src/revelation.py:1521 msgid "New file created" msgstr "" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "" #: src/revelation.py:1576 msgid "Save failed" msgstr "" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/fr.po000066400000000000000000001712431510620476600174440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: # Gilles ACCAD , 2006 # jc1 , 2013 # jc1 , 2013,2021,2023 # jc , 2013 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: jc1 , 2013,2021,2023\n" "Language-Team: French (http://app.transifex.com/revelation/revelation/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Révélation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Gestionnaire de mot de passe" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Organiser et sécuriser vos mots de passe" #: data/info.olasagasti.revelation.gschema.xml:5 msgid "Action to take on doubleclick" msgstr "Action à prendre sur double clicque" #: 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 "L'action à prendre lorsque vous double-cliquez sur un compte dans la vue d'arborescence - Les valeurs valides sont « Aller à », « Modifier » et « Copier »." #: data/info.olasagasti.revelation.gschema.xml:10 msgid "When copying password, also copy username (chained)" msgstr "Lors de la copie de mot de passe, copiez également le nom d'utilisateur (enchaîné)" #: 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 "Si défini, Revelation copiera à la fois le nom d'utilisateur et le mot de passe dans le presse-papiers lorsque vous appuyez sur « Copier le mot de passe » une après l'autre (lorsque le nom d'utilisateur est collé, le mot de passe est automatiquement copié)." #: data/info.olasagasti.revelation.gschema.xml:15 msgid "Autoload a file on startup" msgstr "Chargez automatiquement 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 "Si défini, Revelation chargera automatiquement un fichier de données au démarrage. Le fichier à ouvrir est spécifié dans la clé « Fichier charger automatiquement »." #: data/info.olasagasti.revelation.gschema.xml:20 msgid "A file to autoload on startup" msgstr "Un fichier à la charge automatique 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 "Le chemin d'accès complet à un fichier que Revelation doit faire la charge automatique lors du démarrage. La clé « Charger automatiquement » doit également être définie à vrai pour que cela fonctionne." #: data/info.olasagasti.revelation.gschema.xml:25 msgid "Autolock file when inactive" msgstr "Fichier de verrouillage automatique lorsqu'il est inactif" #: 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 "Si défini, Revelation verrouille automatiquement le fichier actuel après une période d'inactivité. La période d'inactivité est spécifiée dans la clé « délai de verrouillage automatique »." #: data/info.olasagasti.revelation.gschema.xml:30 msgid "Timeout before autolocking file" msgstr "Temps mort avant le fichier de verrouillage automatique" #: 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 "Le nombre de minutes d'inactivité avant que le fichier de données soit automatiquement verrouillé. L'option « verrouillage automatique » doit être activée pour que cela prenne effet." #: data/info.olasagasti.revelation.gschema.xml:35 msgid "Autosave data when changed" msgstr "Données enregistrées automatique lors de la modification" #: 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 "Si défini, Revelation enregistre automatiquement le fichier de données lorsqu'une entrée est ajoutée, mise à jour ou supprimée." #: data/info.olasagasti.revelation.gschema.xml:40 msgid "Launcher for creditcard accounts" msgstr "Lanceur pour les comptes carte de crédit" #: data/info.olasagasti.revelation.gschema.xml:41 msgid "A command which will be executed when launching a creditcard account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte de carte de crédit." #: data/info.olasagasti.revelation.gschema.xml:45 msgid "Launcher for encryption key accounts" msgstr "Lanceur pour les comptes de clé de cryptage" #: data/info.olasagasti.revelation.gschema.xml:46 msgid "" "A command which will be executed when launching a encryption key account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte de clé de cryptage." #: data/info.olasagasti.revelation.gschema.xml:50 msgid "Launcher for database accounts" msgstr "Lanceur pour les comptes base de données" #: data/info.olasagasti.revelation.gschema.xml:51 msgid "A command which will be executed when launching a database account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte de base de données." #: data/info.olasagasti.revelation.gschema.xml:55 msgid "Launcher for door accounts" msgstr "Lanceur pour les comptes porte" #: data/info.olasagasti.revelation.gschema.xml:56 msgid "A command which will be executed when launching a door account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte porte." #: data/info.olasagasti.revelation.gschema.xml:60 msgid "Launcher for email accounts" msgstr "Lanceur pour les comptes emails" #: data/info.olasagasti.revelation.gschema.xml:61 msgid "A command which will be executed when launching an email account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte d'email." #: data/info.olasagasti.revelation.gschema.xml:65 msgid "Launcher for ftp accounts" msgstr "Lanceur pour les comptes FTP" #: data/info.olasagasti.revelation.gschema.xml:66 msgid "A command which will be executed when launching an ftp account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte FTP." #: data/info.olasagasti.revelation.gschema.xml:70 msgid "Launcher for generic accounts" msgstr "Lanceur pour les comptes génériques" #: data/info.olasagasti.revelation.gschema.xml:71 msgid "A command which will be executed when launching a generic account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte générique." #: data/info.olasagasti.revelation.gschema.xml:75 msgid "Launcher for phone accounts" msgstr "Lanceur pour les comptes téléphoniques" #: data/info.olasagasti.revelation.gschema.xml:76 msgid "A command which will be executed when launching a phone account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte téléphonique." #: data/info.olasagasti.revelation.gschema.xml:80 msgid "Launcher for shell accounts" msgstr "Lanceur pour les comptes shell" #: data/info.olasagasti.revelation.gschema.xml:81 msgid "A command which will be executed when launching a shell account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte shell." #: data/info.olasagasti.revelation.gschema.xml:85 msgid "Launcher for remote desktop accounts" msgstr "Lanceur pour les comptes bureau à distance" #: data/info.olasagasti.revelation.gschema.xml:86 msgid "" "A command which will be executed when launching a remote desktop account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte de bureau distant." #: data/info.olasagasti.revelation.gschema.xml:90 msgid "Launcher for website accounts" msgstr "Lanceur pour les comptes site web" #: data/info.olasagasti.revelation.gschema.xml:91 msgid "A command which will be executed when launching a website account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte de site web." #: data/info.olasagasti.revelation.gschema.xml:95 msgid "Launcher for VNC accounts" msgstr "Lanceur pour les comptes VNC" #: data/info.olasagasti.revelation.gschema.xml:96 msgid "A command which will be executed when launching a VNC account." msgstr "Une commande qui sera exécutée lors du lancement d'un compte VNC." #: data/info.olasagasti.revelation.gschema.xml:100 msgid "Length of passwords" msgstr "Longueur des mots de passe " #: 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 "Le nombre de caractères dans les mots de passe générés. Une longueur de moins de 4 caractères sera ignorée." #: data/info.olasagasti.revelation.gschema.xml:105 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 msgid "" "If set, punctuation characters will be also used to generate passwords." msgstr "Si défini, les caractères de ponctuation seront également utilisés pour générer des mots de passe." #: data/info.olasagasti.revelation.gschema.xml:110 msgid "Initial main pane position" msgstr "Position initiale du volet principal" #: data/info.olasagasti.revelation.gschema.xml:111 msgid "" "The initial position of the pane in the main application window, in pixels." msgstr "La position initiale du volet dans la fenêtre principale de l'application, en pixels." #: data/info.olasagasti.revelation.gschema.xml:115 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 "Lors de la définition, les mots de passe seront affichés dans le texte brut. Activer cette option pour obscurer les mots de passe avec ******." #: data/info.olasagasti.revelation.gschema.xml:120 msgid "Displays the searchbar" msgstr "Affiche la barre de recherche" #: data/info.olasagasti.revelation.gschema.xml:121 msgid "When set, Revelation will display its searchbar." msgstr "Une fois défini, Revelation affiche sa barre de recherche." #: data/info.olasagasti.revelation.gschema.xml:125 msgid "Displays the statusbar" msgstr "Affiche la barre d'état" #: data/info.olasagasti.revelation.gschema.xml:126 msgid "When set, Revelation will display its statusbar." msgstr "Lorsqu'il est défini, Revelation affiche sa barre d'état." #: data/info.olasagasti.revelation.gschema.xml:130 msgid "Displays the toolbar" msgstr "Affiche la barre d'outils" #: data/info.olasagasti.revelation.gschema.xml:131 msgid "When set, Revelation will display its toolbar." msgstr "Lorsque défini, Revelation affiche sa barre d'outils." #: data/info.olasagasti.revelation.gschema.xml:135 msgid "Sets the toolbar style" msgstr "Définit le 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 "Définit le style des éléments de la barre d'outils. « Le bureau » utilise le bureau par défaut, « à la fois » montre les icônes et le texte « Horiz- à la fois » affiche les icônes et le texte important, « icônes » montre uniquement les icônes et « texte » montre uniquement le texte." #: data/info.olasagasti.revelation.gschema.xml:140 msgid "Initial window height" msgstr "Hauteur initiale de la fenêtre" #: data/info.olasagasti.revelation.gschema.xml:141 msgid "The initial height of the main window, in pixels." msgstr "La hauteur initiale de la fenêtre principale, en pixels." #: data/info.olasagasti.revelation.gschema.xml:145 msgid "Initial horizontal window position" msgstr "Position initiale de la fenêtre horizontale" #: data/info.olasagasti.revelation.gschema.xml:146 msgid "The initial horizontal position of the main window, in pixels." msgstr "La position horizontale initiale de la fenêtre principale, en pixels." #: data/info.olasagasti.revelation.gschema.xml:150 msgid "Initial vertical window position" msgstr "Position initiale de la fenêtre verticale" #: data/info.olasagasti.revelation.gschema.xml:151 msgid "The initial vertical position of the main window, in pixels." msgstr "La position verticale initiale de la fenêtre principale, en pixels." #: data/info.olasagasti.revelation.gschema.xml:155 msgid "Initial window width" msgstr "Largeur de la fenêtre initiale" #: data/info.olasagasti.revelation.gschema.xml:156 msgid "The initial width of the main window, in pixels." msgstr "La largeur initiale de la fenêtre principale, en pixels." #: data/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "Gestionnaire de mot de passe" #: data/info.olasagasti.revelation.metainfo.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 est un gestionnaire de mot de passe pour le bureau GNOME, publié sous la licence GNU GPL. Il stocke tous vos comptes et mots de passe dans un lieu unique, sécurisé, et vous donne accès à eux grâce à une interface graphique conviviale." #: data/info.olasagasti.revelation.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Parmi les autres caractéristiques Revelation est capable de :" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "Conserver les mots de passe crypté" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "Conserver les mots de passe organisé" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "Verrouillage auto au repos ou lorsque le bureau est verrouillé" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "Importer depuis et exporter dans différents formats de fichiers" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "Une interface utilisateur simple" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "Type multiple d'entrées pour stocker le mot de passe" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Rechercher les entrées par plusieurs critères" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "Fenêtre de raccourcis" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "Ajustez l'application pour vous donner du rythme d'esprit" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "Cachez le contenu lorsque l'application est inactive" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Le nom de l'entrée" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Une description de l'entrée" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Le type d'entrée" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Remarques" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Dossier" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Le nom du dossier" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "La description du dossier" #: data/ui/help-overlay.ui:13 msgctxt "shortcut window" msgid "Password files" msgstr "Fichiers de mot de passe" #: data/ui/help-overlay.ui:17 msgctxt "shortcut window" msgid "Create a new password file" msgstr "Créer un nouveau fichier de mot de passe" #: data/ui/help-overlay.ui:24 msgctxt "shortcut window" msgid "Open a password file" msgstr "Ouvrir un fichier de mot de passe" #: data/ui/help-overlay.ui:31 msgctxt "shortcut window" msgid "Save a password file" msgstr "Enregistrer un fichier de mot de passe" #: data/ui/help-overlay.ui:39 msgctxt "shortcut window" msgid "Close the current password file" msgstr "Fermer le fichier de mot de passe actuel" #: data/ui/help-overlay.ui:48 msgctxt "shortcut window" msgid "Window" msgstr "Fenêtre" #: data/ui/help-overlay.ui:52 msgctxt "shortcut window" msgid "Lock the access to the content" msgstr "Verrouiller l'accès au contenu" #: data/ui/help-overlay.ui:59 msgctxt "shortcut window" msgid "Quit the application" msgstr "Quitter l'application" #: data/ui/help-overlay.ui:66 msgctxt "shortcut window" msgid "Toggle show passwords" msgstr "Basculer l'affichage des mots de passe" #: data/ui/help-overlay.ui:75 msgctxt "shortcut window" msgid "Password entries" msgstr "Entrées de mot de passe" #: data/ui/help-overlay.ui:79 msgctxt "shortcut window" msgid "Add a new password entry" msgstr "Ajouter une nouvelle entrée de mot de passe" #: data/ui/help-overlay.ui:87 msgctxt "shortcut window" msgid "Add a new folder for password entries" msgstr "Ajouter un nouveau dossier pour les entrées de mot de passe" #: data/ui/help-overlay.ui:94 msgctxt "shortcut window" msgid "Edit current entry" msgstr "Modifier l'entrée en cours" #: data/ui/help-overlay.ui:101 msgctxt "shortcut window" msgid "Delete current entry" msgstr "Supprimer l'entrée en cours" #: data/ui/help-overlay.ui:108 msgctxt "shortcut window" msgid "Copy password" msgstr "Copier le mot de passe" #: data/ui/help-overlay.ui:117 msgctxt "shortcut window" msgid "Selection" msgstr "Sélection" #: data/ui/help-overlay.ui:121 msgctxt "shortcut window" msgid "Select all entries" msgstr "Sélectionner toutes les entrées" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Désélectionner toutes les entrées" #: data/ui/help-overlay.ui:137 msgctxt "shortcut window" msgid "Finding password entry" msgstr "Trouver une entrée de mot de passe" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "Afficher la barre de recherche" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Masquer la barre de recherche" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "Trouver la prochaine occurrence" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "Trouver l'occurrence précédente" #: data/ui/help-overlay.ui:171 msgctxt "shortcut window" msgid "General" msgstr "Général" #: data/ui/help-overlay.ui:175 msgctxt "shortcut window" msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" #: data/ui/help-overlay.ui:182 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Ouvrir" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "Enregi_strer" #: 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:46 msgid "_Lock" msgstr "_Verrouiller" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "I_mporter" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exporter" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Fermer" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Quitter" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "Édit_er" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "Ann_uler" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Refaire" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "S_upprimer" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Aller à" #: 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 "_Raccourcis clavier" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Vérificateur de mot de passe" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Saisir un mot de passe à vérifier" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Le résultat de la vérification" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Générateur de mot de passe" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Le mot de passe généré" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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é" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Utiliser des caractères de ponctuation pour les mots de passe" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 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 ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Action du double-clic" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Ouvrir le compte, si cela est possible" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Éditer le compte" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Éditer le compte avec un double-clic" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Copier le mot de passe vers le presse-papier" #: data/ui/preferences-doubleclick.ui:41 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" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Fichiers" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Ouvrir un fichier au démarrage :" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Sélectionner un fichier à ouvrir automatiquement" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Fichier à ouvrir lorsque Revelation démarre" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Enregistrer automatiquement après une modification" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Verrouiller le fichier après une inactivité de" #: data/ui/preferences-files.ui:66 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é" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "La période d'inactivité, en minutes, avant le verrouillage du fichier" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutes" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Mots de passe" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Afficher les mots de passe et les autres secrets" #: data/ui/preferences-passwords.ui:21 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 ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Copier aussi le nom d'utilisateur lors de la copie du mot de passe" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Style de la barre d'outils" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Utiliser le style par défaut du bureau" #: data/ui/preferences-toolbar.ui:21 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" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Afficher les icônes et les textes" #: data/ui/preferences-toolbar.ui:31 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" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Afficher les icônes et les textes importants" #: data/ui/preferences-toolbar.ui:41 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" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Afficher seulement les icônes" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Afficher seulement·les·icônes des éléments de la boîte d'outils" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Afficher seulement les textes" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Afficher seulement·le·texte des éléments de la boîte d'outils" #: data/ui/preferences.ui:17 msgid "General" msgstr "Général" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interface" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Commandes de lancement" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Texte à rechercher pour" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Trouver l'occurrence précédente" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Trouver l'occurrence suivante" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Ouvre un fichier" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Enregistre les données dans un fichier" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Ajouter une entrée" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Crée une nouvelle entrée" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Ajoute un dossier" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Crée un nouveau dossier" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Ouvre l'entrée sélectionnée" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Édite l'entrée sélectionnée" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Supprime chaque entrée sélectionnée" #: 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 "Revelation is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nRevelation is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Revelation; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" #: src/lib/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Liste de comptes Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Liste du compte" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Créé :" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Version de Revelation :" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Le fichier a été modifié" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "Aban_donner" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Enregistrer les changements dans le fichier en cours ?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Enregistrer les changements avant l'ouverture ?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Enregistrer les changements avant la fermeture ?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "Enregistrer les changements avant de fermer ?" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Remplacer le fichier existant ?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Enregistrer dans un fichier non protégé ?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Sélectionner un fichier à exporter en" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Type de fichier " #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Sélectionner un fichier à importer" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Détection automatique" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Sélectionner un fichier à ouvrir" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Fichiers Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Tous les fichiers" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Sélectionner un fichier à enregistrer en" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Saisir un nouveau mot de passe" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Mauvais mot de passe" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Les mots de passe ne correspondent pas" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Utiliser un mot de passe faible ?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Saisir un mot de passe pour déverrouiller le fichier" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Saisir le mot de passe du fichier" #: src/lib/dialog.py:708 #, 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 du fichier pour l'ouvrir" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Saisir un mot de passe pour le fichier" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Les mots de passe saisis ne correspondent pas" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Pas mot de passe saisi" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Données du compte" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Remarques pour l'entrée" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nom non saisi" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Vous devez saisir un nom pour le compte" #: src/lib/dialog.py:979 #, 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:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Voulez-vous vraiment supprimer le dossier « %s » ?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Voulez-vous vraiment supprimer le compte « %s » ?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Veuillez confirmer que vous souhaitez supprimer ce compte." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Vous devez saisir un nom pour le dossier" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Un gestionnaire de mot de passe pour le bureau GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Erreur inconnue" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Le mot de passe semble correct" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Le mot de passe %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Carte de crédit " #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Clef de chiffrement " #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Base de données " #: src/lib/entry.py:224 msgid "Door lock" msgstr "Digicode " #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Email " #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP " #: src/lib/entry.py:273 msgid "Generic" msgstr "Générique " #: src/lib/entry.py:289 msgid "Phone" msgstr "Téléphone " #: src/lib/entry.py:304 msgid "Shell" msgstr "Interpréteur de commandes " #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Bureau distant " #: src/lib/entry.py:338 msgid "Website" msgstr "Site internet " #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC " #: src/lib/entry.py:408 msgid "Card number" msgstr "Numéro de carte " #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Type de carte" #: src/lib/entry.py:420 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:430 msgid "CCV number" msgstr "Numéro CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificat, par exemple un certificat SSL X.509" #: src/lib/entry.py:452 msgid "Code" msgstr "Code" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Un code utilisé pour accéder à quelque chose" #: src/lib/entry.py:464 msgid "A database name" msgstr "Un nom de base de données" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domaine" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Une adresse email" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Date d'expiration" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Le mois d'expiration de la carte de crédit" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Nom d'hôte " #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Fichier clef" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Emplacement" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Un emplacement physique, par exemple l'entrée du bureau" #: src/lib/entry.py:540 msgid "Password" msgstr "Mot de passe " #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Numéro de téléphone" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Un numéro de téléphone" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Numéro de port" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Nom d'utilisateur " #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Un nom, ou autre chose utilisé pour vous identifier" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Continuer" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Générer" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "Ajouter une _entrée" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Ajouter un dossier" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Changer" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Recharger" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Remplacer" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "Déverro_uiller" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "Mettre à jo_ur" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Copier le mot de passe" #: src/lib/ui.py:432 msgid "Select File" msgstr "Sélectionner le fichier" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Parcourir..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Générer" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Remarques : " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Mise à jour il y a %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "N'importe quel type" #: src/lib/util.py:56 msgid "is too short" msgstr "est trop court" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "n'est pas assez complexe" #: src/lib/util.py:89 msgid "is too weak" msgstr "est trop faible" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "est un palindrome" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i secondes" #: src/lib/util.py:318 msgid "years" msgstr "années" #: src/lib/util.py:318 msgid "year" msgstr "année" #: src/lib/util.py:326 msgid "months" msgstr "mois" #: src/lib/util.py:326 msgid "month" msgstr "mois" #: src/lib/util.py:330 msgid "weeks" msgstr "semaines" #: src/lib/util.py:330 msgid "week" msgstr "semaine" #: src/lib/util.py:334 msgid "days" msgstr "jours" #: src/lib/util.py:334 msgid "day" msgstr "jour" #: src/lib/util.py:338 msgid "hours" msgstr "heures" #: src/lib/util.py:338 msgid "hour" msgstr "heure" #: src/lib/util.py:342 msgid "minute" msgstr "minute" #: src/lib/util.py:346 msgid "seconds" msgstr "secondes" #: src/lib/util.py:346 msgid "second" msgstr "seconde" #: src/revelation.py:89 msgid "Missing data files" msgstr "Fichier de donnée manquant" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Données de configuration incomplètes" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Fichier de données non valide" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Nouveau fichier" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "Ann_uler %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Refaire %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Ouverture annulée" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "Correspondance trouvée pour « %s »" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "Aucune correspondance trouvée pour « %s »" #: src/revelation.py:1041 msgid "Old file format" msgstr "Ancien format de fichier" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "L'ouverture a échouée" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Format de fichier non valide" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Le fichier « %s » contient des données non valides." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Données inconnues" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Version de données inconnue" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Impossible de détecter le type de fichier" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Impossible d'ouvrir le fichier" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "L'entrée n'a pas de mot de passe à copier" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Mot de passe copié vers le presse-papier" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Entrées copiées" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Couper les entrées" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Entrées coupées" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Coller les entrées" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Entrées collées" #: src/revelation.py:1186 msgid "Add entry" msgstr "Ajouter une entrée" #: src/revelation.py:1192 msgid "Entry added" msgstr "Entrée ajoutée" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "L'ajout de l'entrée a été annulé" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Éditer le dossier" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Éditer l'entrée" #: src/revelation.py:1218 msgid "Update entry" msgstr "Mise à jour de l'entrée" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Entrée mise à jour" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "L'édition de l'entrée a été annulée" #: src/revelation.py:1251 msgid "Folder added" msgstr "Dossier ajouté" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "L'ajout de dossier a été annulé" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Aucune commande de démarrage pour les entrées %s" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Entrée ouverte" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Format de commande de démarrage non valide" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Données de l'entrée manquantes" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Déplacer l'entrée" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Entrées déplacées" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Supprimer l'entrée" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Entrées supprimées" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "La suppression de l'entrée a été annulée" #: src/revelation.py:1372 msgid "Password changed" msgstr "Mot de passe modifié" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Changement du mot de passe annulé" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "Fichier %s fermé" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "Fermeture fichier annulée" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Données exportées vers %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Exportation annulée" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Impossible d'écrire dans le fichier" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Échec de l'exportation" #: src/revelation.py:1435 msgid "Import data" msgstr "Importation des données" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Données importées à partir de %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Importation annulée" #: src/revelation.py:1474 msgid "Locked" msgstr "Verrouillé" #: src/revelation.py:1475 msgid "File locked" msgstr "Fichier verrouillé" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Sortie annulée du fait de changements non enregistrés" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Fichier déverrouillé" #: src/revelation.py:1521 msgid "New file created" msgstr "Nouveau fichier créé" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "La création du nouveau fichier a été annulée" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Fichier %s ouvert" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Données enregistrées dans le fichier %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Enregistrement annulé" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Impossible d'enregistrer le fichier" #: src/revelation.py:1576 msgid "Save failed" msgstr "L'enregistrement a échoué" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Sortie du programme annulée" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s refait" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s annulé" #: src/revelation.py:1648 msgid "Preferences" msgstr "Préférences" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%% : un signe « %s »" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x : variable optionnelle d'extension" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%) :·sous chaîne optionnelle d'extension" revelation-revelation-0.5.6/po/it_IT.po000066400000000000000000001275751510620476600200560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: antonio lanzone , 2014\n" "Language-Team: Italian (Italy) (http://app.transifex.com/revelation/revelation/language/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Cartella" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Blocca" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importa" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Esporta" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Modifica" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Ri_muovi" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Vai a" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Generatore di password" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Il file è stato modificato" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Annulla" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Salvare le modifiche per questo file?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Salvare le modifiche prima dell'apertura?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Salvare i cambiamenti prima di chiudere?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Tipo di file" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Seleziona il file da importare" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Rileva automaticamente" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Seleziona il file da aprire" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "File di Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Tutti i file" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Seleziona il file da salvare" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Inserisci una nuova password" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Password errata" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Le password non corrispondono" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Utilizzare una password insicura?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:649 msgid "Enter password to unlock file" msgstr "Inseisci la password per sbloccare il file" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Inserisci la password del file" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Inserisci la password per il file" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "La password che hai inserito non corrisponde." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Nessuna password inserita" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nome non iserito" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Devi inserire un nome per l'account" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Carta di credito" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Database" #: src/lib/entry.py:224 msgid "Door lock" msgstr "" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Email" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Generico" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefono" #: src/lib/entry.py:304 msgid "Shell" msgstr "" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Desktop remoto" #: src/lib/entry.py:338 msgid "Website" msgstr "Sito internet" #: src/lib/entry.py:355 msgid "VNC" msgstr "VCN" #: src/lib/entry.py:408 msgid "Card number" msgstr "Numero carta" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Tipo di carta" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Il tipo di carta di credito, come MasterCard o VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "Numero CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificato" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Un certificato, come il certificato X.509 SSL" #: src/lib/entry.py:452 msgid "Code" msgstr "Codice" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Un codice utilizzato per accedere a qualcosa" #: src/lib/entry.py:464 msgid "A database name" msgstr "Nome del database" #: src/lib/entry.py:474 msgid "Domain" msgstr "Dominio" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:486 msgid "An email address" msgstr "Un indirizzo email" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Data di scadenza" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Il mese in cui la carta di credito scade" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Nome Host" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "File chiave" #: src/lib/entry.py:519 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:529 msgid "Location" msgstr "Luogo" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Un luogo fisico, come come l'ingresso dell'ufficio" #: src/lib/entry.py:540 msgid "Password" msgstr "Password" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Numero di telefono" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Un numero di telefono" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Numero porta" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Nome utente" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Un nome o un'altro identificativo utilizzato per identificarti" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Continua" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Genera" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Aggiungi voce" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Aggiungi cartella" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Cambia" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Ricarica" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Sostituisci" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Sblocca" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Aggiorna" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Copia la password" #: src/lib/ui.py:432 msgid "Select File" msgstr "Seleziona il file" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Sfoglia..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Genera" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Tutti i tipi" #: src/lib/util.py:56 msgid "is too short" msgstr "" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:89 msgid "is too weak" msgstr "" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "" #: src/lib/util.py:318 msgid "years" msgstr "" #: src/lib/util.py:318 msgid "year" msgstr "" #: src/lib/util.py:326 msgid "months" msgstr "" #: src/lib/util.py:326 msgid "month" msgstr "" #: src/lib/util.py:330 msgid "weeks" msgstr "" #: src/lib/util.py:330 msgid "week" msgstr "" #: src/lib/util.py:334 msgid "days" msgstr "" #: src/lib/util.py:334 msgid "day" msgstr "" #: src/lib/util.py:338 msgid "hours" msgstr "" #: src/lib/util.py:338 msgid "hour" msgstr "" #: src/lib/util.py:342 msgid "minute" msgstr "" #: src/lib/util.py:346 msgid "seconds" msgstr "" #: src/lib/util.py:346 msgid "second" msgstr "" #: src/revelation.py:89 msgid "Missing data files" msgstr "" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:97 msgid "Invalid data files" msgstr "" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:580 msgid "New file" msgstr "" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1057 msgid "Unknown data" msgstr "" #: src/revelation.py:1057 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1061 msgid "Unknown data version" msgstr "" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1123 msgid "Entries copied" msgstr "" #: src/revelation.py:1144 msgid "Cut entries" msgstr "" #: src/revelation.py:1151 msgid "Entries cut" msgstr "" #: src/revelation.py:1165 msgid "Paste entries" msgstr "" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "" #: src/revelation.py:1186 msgid "Add entry" msgstr "" #: src/revelation.py:1192 msgid "Entry added" msgstr "" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "" #: src/revelation.py:1218 msgid "Update entry" msgstr "" #: src/revelation.py:1223 msgid "Entry updated" msgstr "" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1251 msgid "Folder added" msgstr "" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "" #: src/revelation.py:1324 msgid "Entries moved" msgstr "" #: src/revelation.py:1350 msgid "Remove entry" msgstr "" #: src/revelation.py:1356 msgid "Entries removed" msgstr "" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "" #: src/revelation.py:1435 msgid "Import data" msgstr "" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "" #: src/revelation.py:1474 msgid "Locked" msgstr "" #: src/revelation.py:1475 msgid "File locked" msgstr "" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1500 msgid "File unlocked" msgstr "" #: src/revelation.py:1521 msgid "New file created" msgstr "" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "" #: src/revelation.py:1576 msgid "Save failed" msgstr "" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/lt.po000066400000000000000000001343621510620476600174550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Remigijus Jarmalavičius , 2011\n" "Language-Team: Lithuanian (http://app.transifex.com/revelation/revelation/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\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" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Įrašo pavadinimas" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Įrašo aprašymas" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Įrašo tipas" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Katalogas" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Katalogo pavadinimas" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Katalogo aprašymas" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Užrakinti" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importuoti" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Eksportuoti" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Redaguoti" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "_Pašalinti" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Eiti į" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Slaptažodžio tikrinimas" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Įveskite slaptažodį patikrinimui" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Rezultatas patikrinto slaptažodžio" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Slaptažodžio generatorius" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Sugeneruotas slaptažodis" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutės" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Tekstas paieškai" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Ieškoti prieš tai buvusio pasikartojimo" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Ieškoti kito pasikartojimo" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation paskyrų sąrašas" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Paskyrų sąrašas" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Sukurta:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation versija:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Failo turinys pasikeitė" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Atšaukti" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Išsaugoti pakeitimus į failą?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Išsaugoti prieš atidarant?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Išsaugoti pakeitimus prieš išeinant?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Pakeisti egzistuojantį failą?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Išsaugoti nesaugų failą?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Pasirinkite failą eksportavimui" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Failo tipas" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Pasirinkite failą importavimui" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Automatiškai atpažinti" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Pasirinkite failą atidarymui" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation failai" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Visi failai" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Pasirinkite failą išsaugojimui" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Įveskite slaptažodį" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Neteisingas slaptažodis" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Slaptažodžiai nesutampa" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Naudoti nesaugų slaptažodį?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Įveskite slaptažodį slaptažodžiui atrakinti" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Įveskite slaptažodį" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Įveskite slaptažodį failui" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Slaptažodžiai kuriuos įvedėte nesutampa." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Neįvestas slaptažodis" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "Turite įvesti slaptažodį naujam duomenų failui." #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Paskyros duomenys" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Neįvestas pavadinimas" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Turite įvesti paskyros pavadinimą" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Ar tikrai pašalinti %i pasirinktus įrašus?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Ar tikrai ištrinti katalogą '%s'?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Ar tikrai pašalinti paskyrą '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Patvirtinkite ar tikrai norite pašalinti paskyrą." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Privalote įvesti katalogo pavadinimą" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Slaptažodžių valdytojas GNOME darbastaliui" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Nežinoma klaida" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Slaptažodis atrodo saugus" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Slaptažodis %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kreditinė kortelė" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Kriptografijos raktas" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Duomenų bazė" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Durų užraktas" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "El. paštas" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Bendras" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefonas" #: src/lib/entry.py:304 msgid "Shell" msgstr "Pultas" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:338 msgid "Website" msgstr "Tinklapis" #: src/lib/entry.py:355 msgid "VNC" msgstr "" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kortelės numeris" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Kortelės tipas" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Kreditinės kortelės tipas, kaip MasterCard arba VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CVV numeris" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Sertifikatas" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Sertifikatas, pavyzdžiui X.509 SSL Certificate" #: src/lib/entry.py:452 msgid "Code" msgstr "Kodas" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Kodas naudojamas priėjimui prie kažko" #: src/lib/entry.py:464 msgid "A database name" msgstr "Duomenų bazės pavadinimas" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domenas" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "El. pašto adresas" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Galiojimo data" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Mėnuo, kada kredito kortelė nustos galioti" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Pagrindinio kompiuterio vardas" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Rakto failas" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Vieta" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Fizinė vieta, kaip įėjimas į ofisą" #: src/lib/entry.py:540 msgid "Password" msgstr "Slaptažodis" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Telefono numeris" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Telefono numeris" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Prievado numeris" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Interneto prievado numeris, naudojamas priėjimui" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Uniform Resource Locator (URL), interneto adresas" #: src/lib/entry.py:595 msgid "Username" msgstr "Naudotojo vardas" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Vardas ar kitas atpažinimo požymis " #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Tęsti" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Generuoti" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Pridėti įrašą" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Pridėti katalogą" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Pakeisti" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Perkrauti" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Pakeisti" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Atrakinti" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Atnaujinti" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Nukopijuoti slaptažodį" #: src/lib/ui.py:432 msgid "Select File" msgstr "Pasirinkite failą" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Naršyti..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Generuoti" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Atnaujinta prieš %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Bet koks tipas" #: src/lib/util.py:56 msgid "is too short" msgstr "yra per trumpas" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "nėra pakankamai įvairus" #: src/lib/util.py:89 msgid "is too weak" msgstr "yra per silpnas" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "vienodas skaitant iš bet kurios pusės" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekundžių" #: src/lib/util.py:318 msgid "years" msgstr "metų" #: src/lib/util.py:318 msgid "year" msgstr "metai" #: src/lib/util.py:326 msgid "months" msgstr "mėnesių" #: src/lib/util.py:326 msgid "month" msgstr "mėnuo" #: src/lib/util.py:330 msgid "weeks" msgstr "savaičių" #: src/lib/util.py:330 msgid "week" msgstr "savaitė" #: src/lib/util.py:334 msgid "days" msgstr "dienų" #: src/lib/util.py:334 msgid "day" msgstr "diena" #: src/lib/util.py:338 msgid "hours" msgstr "valandų" #: src/lib/util.py:338 msgid "hour" msgstr "valanda" #: src/lib/util.py:342 msgid "minute" msgstr "minutė" #: src/lib/util.py:346 msgid "seconds" msgstr "sekundžių" #: src/lib/util.py:346 msgid "second" msgstr "sekundė" #: src/revelation.py:89 msgid "Missing data files" msgstr "" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:97 msgid "Invalid data files" msgstr "" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:580 msgid "New file" msgstr "" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1057 msgid "Unknown data" msgstr "" #: src/revelation.py:1057 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1061 msgid "Unknown data version" msgstr "" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1123 msgid "Entries copied" msgstr "" #: src/revelation.py:1144 msgid "Cut entries" msgstr "" #: src/revelation.py:1151 msgid "Entries cut" msgstr "" #: src/revelation.py:1165 msgid "Paste entries" msgstr "" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "" #: src/revelation.py:1186 msgid "Add entry" msgstr "" #: src/revelation.py:1192 msgid "Entry added" msgstr "" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "" #: src/revelation.py:1218 msgid "Update entry" msgstr "" #: src/revelation.py:1223 msgid "Entry updated" msgstr "" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1251 msgid "Folder added" msgstr "" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "" #: src/revelation.py:1324 msgid "Entries moved" msgstr "" #: src/revelation.py:1350 msgid "Remove entry" msgstr "" #: src/revelation.py:1356 msgid "Entries removed" msgstr "" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "" #: src/revelation.py:1435 msgid "Import data" msgstr "" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "" #: src/revelation.py:1474 msgid "Locked" msgstr "" #: src/revelation.py:1475 msgid "File locked" msgstr "" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1500 msgid "File unlocked" msgstr "" #: src/revelation.py:1521 msgid "New file created" msgstr "" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "" #: src/revelation.py:1576 msgid "Save failed" msgstr "" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/meson.build000066400000000000000000000000461510620476600206270ustar00rootroot00000000000000i18n.gettext(rvl_name, preset:'glib') revelation-revelation-0.5.6/po/nl.po000066400000000000000000001507441510620476600174510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Heimen Stoffels , 2015,2018,2020\n" "Language-Team: Dutch (http://app.transifex.com/revelation/revelation/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Wachtwoord Beheersysteem" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Organiseer en beveilig uw wachtwoorden" #: 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Invoernaam" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Invoerbeschrijving" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Invoertype" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notities" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Map" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Naam van de map" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Berschrijving van de map" #: data/ui/help-overlay.ui:13 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 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 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 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 "_Bestand" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Nieuw" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Open" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Bewaar" #: 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:46 msgid "_Lock" msgstr "_Vergrendelen" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importeren" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exporteren" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Sluiten" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Afsluiten" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Aanpassen" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Ongedaan maken" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Herhaal" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Ver_wijderen" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Ga naar" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Wachtwoord Controleur" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Geef een wachtwoord in om te controleren" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Controle resultaten" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Wachtwoord Generator" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Het Gegeneerde wachtwoord" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Gebruik leestekens voor wachtwoorden" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Wanneer wachtwoorden worden gegenereerd, gebruik leestekens als %, =, { of ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Dubbelklikactie" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Indien mogelijk, ga naar account" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Account bewerken" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Het account bewerken bij dubbelklikken" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Wachtwoord kopieren naar klembord" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopieer het accountwachtwoord naar het klembord bij dubbelklikken" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Bestanden" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Bestand openen bij het opstarten:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Bestand selecteren om automatisch te openen" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Bestand op te openen wanneer Revelation wordt gestart" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Gegevens automatisch opslaan na wijzigingen" #: data/ui/preferences-files.ui:52 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." #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Bestand vergrendelen wanneer inactief gedurende" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatisch het databestand vergrendelen bij een periode van inactiviteit" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "De inactiviteitsperiode alvorens het bestand te vergrendelen, in minuten" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minuten" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Wachtwoorden" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Wachtwoorden en andere geheimen weergeven" #: data/ui/preferences-passwords.ui:21 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 ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Gebruikersnaam meekopiëren bij kopiëren wachtwoord" #: data/ui/preferences-passwords.ui:31 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\"" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Werkbalkstijl" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Gebruik desktopstandaard" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Toon werkbalkopties in standaardstijl" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Toon ikonen en tekst" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Toon werkbalkopties met pictogrammen èn tekst." #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Toon ikonen en belangrijke tekst" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Toon toolnar items met text naast belangrijke iconen" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Alleen pictogrammen zichtbaar" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Werkbalkelementen alleen met pictogrammen weergeven" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Alleen text zichtbaar" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Werkbalkelementen alleen met tekst weergeven" #: data/ui/preferences.ui:17 msgid "General" msgstr "Algemeen" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interface" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Ganaar-commando's" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Zoekopdracht voor" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Vind de vorige overeenkomst" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Vind de volgende overeenkomst" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Open een bestand" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Gegevens opslaan in een bestand" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Item toevoegen" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Nieuw item aanmaken" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Map toevoegen" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Nieuwe map aanmaken" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Ga naar de geselecteerde items" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Geselecteerd item bewerken" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Geselecteerde items verwijderen" #: 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\nhet onder de voorwaarden van de GNU General Public License zoals gepubliceerd door\nde Free Software Foundation; ofwel versie 2 van de licentie, of\n(naar uw keuze) elke latere versie.\n\nRevelation wordt verspreid in de hoop dat het nuttig zal zijn,\nmaar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van\nVERKOOPBAARHEID OF GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de\nGNU General Public License voor meer details.\n\nU zou een kopie van de GNU General Public License moeten hebben ontvangen\nsamen met Revelation; zo niet, schrijf dan naar de Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 Verenigde Staten" #: src/lib/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation account lijst" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Accountslijst" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Aangemaakt:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation versie:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Bestand is aangepast" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Negeren" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Aanpassingen bewaren in het active bestand?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Wijzigingen opslaan voor het openen?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Aanpassingen bewaren voor afsluiten?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Bestaand bestand vervangen?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Bewaren in een onbeveiligd bestand?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Kies bestand om naar te exporteren" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Bestandstype" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Kies bestand om te importeren" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Automatisch detecteren" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Kies bestand om te openen" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation bestand" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Alle bestanden" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Kies bestand om te bewaren" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Geef een nieuw wachtwoord in" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Wachtwoord niet juist" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Wachtwoorden zijn verschillend" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Het ingegeven wachtwoord en verificatie wachtwoord zijn verschillend." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Onbeveiligd wachtwoord gebruiken?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Geef het wachtwoord in om het bestand te ontgrendelen." #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Geef het bestandswachtwoord in" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Geef wachtwoord voor bestand in" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Het ingegeven wachtwoord is verschillend" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Geen wachtwoord ingegeven" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Accountgegevens" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notities voor het item" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Naam niet ingegeven" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "U moet een naam invoeren voor het account." #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Echt %i geselecteerde items verwijderen?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Echt map '%s' verwijderen?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Echt account '%s' verwijderen?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Gelieve te bevestigen dat u dit account wilt verwijderen." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "U moet de map een naam geven" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Een wachtwoord beheersysteem voor de GNOME desktop" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Ongekende foutmelding" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Wachtwoord is goed bevonden" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Het wachtwoord %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kredietkaart" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Cryptische Sleutel" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Databank" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Deurslot" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Email" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Generiek" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefoon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Extern Bureaublad" #: src/lib/entry.py:338 msgid "Website" msgstr "Webstek" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kaart nummer" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Het kredietkaartnummer, meestal een 16-cijferig nummer." #: src/lib/entry.py:419 msgid "Card type" msgstr "Kaart type" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Type kaart, zoals MasterCard of VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV nummer" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificaat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Een certificaat, zoals het X.509 SSL-certificaat" #: src/lib/entry.py:452 msgid "Code" msgstr "Kode" #: src/lib/entry.py:453 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:464 msgid "A database name" msgstr "Een databank naam" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domein" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Een email adres" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Vervaldatum" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "De maand dat de credit card verloopt" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Hostnaam" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Sleutelbestand" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Locatie" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Een fysische lokatie, bv. ingang buro" #: src/lib/entry.py:540 msgid "Password" msgstr "Wachtwoord" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Telefoon nummer" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Een telefoon nummer" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Poort nummer" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Een Uniform Resource Locator, zoals een websiteadres" #: src/lib/entry.py:595 msgid "Username" msgstr "Gebruikersnaam" #: src/lib/entry.py:596 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:37 msgid "_Continue" msgstr "_Doorgaan" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Genereer" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Item Toevoegen" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Map Toevoegen" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Aanpassen" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Herladen" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Vervangen" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Ontgrendelen" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Bijwerken" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Wachtwoord kopiëren" #: src/lib/ui.py:432 msgid "Select File" msgstr "Bestand selecteren" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Bladeren..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Genereer" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notities:" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "%s geleden aangepast" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Elk type" #: src/lib/util.py:56 msgid "is too short" msgstr "is te kort" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "is niet gevarieerd genoeg" #: src/lib/util.py:89 msgid "is too weak" msgstr "is te zwak" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "is een palindroom" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i seconden" #: src/lib/util.py:318 msgid "years" msgstr "jaren" #: src/lib/util.py:318 msgid "year" msgstr "jaar" #: src/lib/util.py:326 msgid "months" msgstr "maanden" #: src/lib/util.py:326 msgid "month" msgstr "maand" #: src/lib/util.py:330 msgid "weeks" msgstr "weken" #: src/lib/util.py:330 msgid "week" msgstr "week" #: src/lib/util.py:334 msgid "days" msgstr "dagen" #: src/lib/util.py:334 msgid "day" msgstr "dag" #: src/lib/util.py:338 msgid "hours" msgstr "uren" #: src/lib/util.py:338 msgid "hour" msgstr "uur" #: src/lib/util.py:342 msgid "minute" msgstr "minuut" #: src/lib/util.py:346 msgid "seconds" msgstr "seconden" #: src/lib/util.py:346 msgid "second" msgstr "seconde" #: src/revelation.py:89 msgid "Missing data files" msgstr "Ontbrekende gegevensbestanden" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Ontbrekende configuratiegegevens" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation kan zijn configuratiebestanden niet vinden.; installeer Revelation opnieuw." #: src/revelation.py:97 msgid "Invalid data files" msgstr "Ongeldige gegevensbestanden" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Nieuw Bestand" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Maak %s ongedaan" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Herhaal %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Geannuleerde openen" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Oud bestandsformaat" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Openen mislukt" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Ongeldig bestandsformaat" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Het bestand '%s' bevat ongeldige gegevens." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Onbekende gegevens" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Onbekende gegevensversie" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Niet in staat om bestandstype vast te stellen." #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Niet in staat om het bestand te openen." #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Item heeft geen wachtwoord om te kopiëren" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Wachtwoord gekopieerd naar klembord" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Items gekopieerd" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Knip items" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Items geknipt" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Items plakken" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Items geplakt" #: src/revelation.py:1186 msgid "Add entry" msgstr "Item toevoegen" #: src/revelation.py:1192 msgid "Entry added" msgstr "Item toegevoegd" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Toevoegen item geannuleerd" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Map bewerken" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Item bewerken" #: src/revelation.py:1218 msgid "Update entry" msgstr "Item bijwerken" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Item bijgewerkt" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Item bewerken geannuleerd" #: src/revelation.py:1251 msgid "Folder added" msgstr "Map toegevoegd" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Map toevoegen afgebroken" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Geen ganaar-commando gevonden voor %s-invoeren" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Item geopend" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Ongeldig ganaar-commando-opmaak" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Ontbrekende itemgegevens" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Item verplaatsen" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Items verplaatst" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Item verwijderen" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Items verwijderd" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Item verwijderen geannuleerd" #: src/revelation.py:1372 msgid "Password changed" msgstr "Wachtwoord aangepast" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Wachtwoord aanpassen afgebroken" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Gegevens naar %s geëxporteerd" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Exporteren geannuleerd" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Niet in staat om naar bestand weg te schrijven" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Exporteren mislukt" #: src/revelation.py:1435 msgid "Import data" msgstr "Gegevens importen" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Gegevens importeren vanuit '%s'" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Importeren geannuleerd" #: src/revelation.py:1474 msgid "Locked" msgstr "Geblokkeerd" #: src/revelation.py:1475 msgid "File locked" msgstr "Bestand geblokkeerd" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "U moet eerst de wijzigingen opslaan voordat u kunt afsluiten." #: src/revelation.py:1500 msgid "File unlocked" msgstr "Bestand ontgrendeld" #: src/revelation.py:1521 msgid "New file created" msgstr "Nieuw bestand aangemaakt" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Nieuw bestand afgebroken" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Bestand %s geopend" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Data opgeslagen naar bestand %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Bewaren afgebroken" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Niet in staat om bestand op te slaan" #: src/revelation.py:1576 msgid "Save failed" msgstr "Bewaren mislukt" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Afsluiten geannuleerd" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s herhaald" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s ongedaan gemaakt" #: src/revelation.py:1648 msgid "Preferences" msgstr "Voorkeuren" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: een \"%\" teken" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: optionele uitbreidingsvariabele" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): optionele uitbreiding met substring" revelation-revelation-0.5.6/po/pl.po000066400000000000000000001447111510620476600174500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Lorem Ipsum , 2014\n" "Language-Team: Polish (http://app.transifex.com/revelation/revelation/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Menedżer haseł" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Uporządkuj i zabezpiecz swoje hasła" #: 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Nazwa zapisu" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Opis zapisu" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Typ zapisu" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notatki" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Katalog" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Nazwa katalogu" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Opis katalogu" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "Otwórz" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "Zapisz" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "Zablokuj" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "Import" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "Eksport" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "Edycja" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "Cofnij" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "Powtórz" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Usuń" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "Idź do" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Sprawdzanie haseł" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Wprowadź hasło do sprawdzenia" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Wynik sprawdzenia" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Generator haseł" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Wygenerowane hasło" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Użyj znaków interpunkcyjnych w hasłach" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Podczas generowania hasła, użyj znaków interpunkcyjnych takich jak %, =, { lub ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Akcja podwójnego kliknięcia" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Idź do, jeśli możłiwe" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Modyfikuj" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Modyfikuj po podwójnym kliknięciu" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Skopiuj hasło do schowka" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiuje hasło zapisu do schowka po podwójnym kliknięciu" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Pliki" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Otwórz plik przy uruchomieniu:" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "Jeśli zaznaczone, plik będzie otwierany podczas uruchamiania programu" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Wybierz plik do automatycznego otwierania" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Plik do otwarcia podczas uruchomienia Revelation" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Zapisuj automatycznie dane, które zostały zmienione" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Zablokuj plik jeśli jest nieaktywny przez" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Automatycznie blokuje plik danych jeśli był nieaktywny przez przedział czasu" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Czas bezczynności przed zablokowaniem pliku, w minutach" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minut" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Hasła" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Wyświetlaj hasła oraz inne wrażliwe dane" #: data/ui/preferences-passwords.ui:21 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 ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Skopiuj także nazwę użytkownika podczas kopiowania hasła" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Styl paska narzędzi" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Użyj domyślnego ze środowiska" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Pokazuje elementy paska narzędzi w stylu domyśłnym" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Pokazuj ikony i tekst" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Pokazuje elementy paska narzędziowego jednocześnie za pomocą ikon i tekstu" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Pokazuj ikony i ważne teksty" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Pokazuje elementy paska narzędzi z tekstem obok ważnych ikon" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Pokazuj tylko ikony" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Pokazuje elementy paska narzędziowego tylko za pomocą ikon" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Pokazuj tylko tekst" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Pokazuje elementy paska narzędziowego tylko za pomocą tekstu" #: data/ui/preferences.ui:17 msgid "General" msgstr "Ogólne" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interfejs" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Polecenia idź do" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Fraza wyszukiwania" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Wyszukaj poprzednie dopasowanie" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Wyszukaj następne dopasowanie" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Otwórz plik" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Zapisz dane do pliku" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Dodaj zapis" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Utwórz nowy zapis" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Dodaj katalog" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Utwórz nowy katalog" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Idź do wybranych zapisów" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Modyfikuj wybrany zapis" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Usuń zaznaczone zapisy" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Lista zapisów Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Lista zapisów" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Utworzono:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Wersja Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Plik został zmieniony" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "Anuluj" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Zapisać zmiany do bieżącego pliku?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Zapisać zmiany przed otwarciem?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Zapisać zmiany przed wyjściem?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Zastąpić istniejący plik?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Zapisać do niezabezpieczonego pliku?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Wybierz plik do eksportu" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Typ pliku" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Wybierz plik do importu" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Wykryj automatycznie" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Wybierz plik do otwarcia" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Pliki Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Wszystkie pliki" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Wybierz plik do zapisu" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Wprowadź nowe hasło" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Nieprawidłowe hasło" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Hasła nie pasują" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Wprowadzone hasło i jego potwierdzenie nie pasują." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Użyć słabego hasła?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Wprowadź hasło aby odblokować plik" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Wprowadź hasło" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Wprowadź hasło pliku." #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Wprowadzone hasła nie pasują." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Nie wprowadzono hasła" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Dane konta" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notatki zapisu" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nazwa nie wprowadzona" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Należy podać nazwę zapisu" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Czy na pewno usunąć %i zaznaczone zapisy?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Czy na pewno usunąć katalog \"%s\"?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Czy na pewno usunąć zapis \"%s\"?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Proszę potwierdzić chęć usunięcia tego zapisu." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Należy podać nazwę katalogu" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Menedżer haseł GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Nieznany błąd" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Hasło wygląda dobrze" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Hasło %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Karta kredytowa" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Klucz" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Baza danych" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Blokada drzwi" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "E-mail" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Ogólny" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Powłoka" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Zdalny pulpit" #: src/lib/entry.py:338 msgid "Website" msgstr "Strona www" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Numer karty" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Numer karty kredytowej, zazwyczaj 16-cyfrowy" #: src/lib/entry.py:419 msgid "Card type" msgstr "Typ karty" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ karty kredytowej, np. MasterCard lub VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "numer CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certyfikat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Certyfikat, np. X.509 " #: src/lib/entry.py:452 msgid "Code" msgstr "Kod" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Kod dający dostęp do czegoś" #: src/lib/entry.py:464 msgid "A database name" msgstr "Nazwa bazy danych" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domena" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Adres e-mail" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Data wygaśnięcia" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Miesiąc wygaśnięcia ważności karty" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Nazwa hosta" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Plik klucza" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Położenie" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Położenie fizyczne, np. wejście do biura" #: src/lib/entry.py:540 msgid "Password" msgstr "Hasło" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Numer telefonu" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Numer telefonu" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Numer portu" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "and. Uniform Resource Locator, np. adres strony www" #: src/lib/entry.py:595 msgid "Username" msgstr "Nazwa użytkownika" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Nazwa lub inna informacja identyfikacyjna" #: src/lib/ui.py:37 msgid "_Continue" msgstr "Dalej" #: src/lib/ui.py:42 msgid "_Generate" msgstr "Wygeneruj" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "Dodaj zapis" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "Dodaj katalog" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "Zmień" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "Przeładuj" #: src/lib/ui.py:56 msgid "_Replace" msgstr "Zastąp" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "Odblokuj" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "Uaktualnij" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Skopiuj hasło" #: src/lib/ui.py:432 msgid "Select File" msgstr "Wybierz plik" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Przeglądaj..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Wygeneruj" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notatki:" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Uaktualniono %s temu" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Każdy typ" #: src/lib/util.py:56 msgid "is too short" msgstr "jest za krótkie" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "zbyt mało różnorodne" #: src/lib/util.py:89 msgid "is too weak" msgstr "za słabe" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "jest palindromem" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekund" #: src/lib/util.py:318 msgid "years" msgstr "lat" #: src/lib/util.py:318 msgid "year" msgstr "rok" #: src/lib/util.py:326 msgid "months" msgstr "miesięcy" #: src/lib/util.py:326 msgid "month" msgstr "miesiąc" #: src/lib/util.py:330 msgid "weeks" msgstr "tygodni" #: src/lib/util.py:330 msgid "week" msgstr "tydzień" #: src/lib/util.py:334 msgid "days" msgstr "dni" #: src/lib/util.py:334 msgid "day" msgstr "dzień" #: src/lib/util.py:338 msgid "hours" msgstr "godzin" #: src/lib/util.py:338 msgid "hour" msgstr "godzina" #: src/lib/util.py:342 msgid "minute" msgstr "minuta" #: src/lib/util.py:346 msgid "seconds" msgstr "sekund" #: src/lib/util.py:346 msgid "second" msgstr "sekunda" #: src/revelation.py:89 msgid "Missing data files" msgstr "Brakujące pliki danych" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Brak danych konfiguracyjnych" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Niewłaściwe pliki danych" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Nowy plik" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "Cofnij %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "Powtórz %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Otwieranie anulowane" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Stary format pliku" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Otwieranie nieudane" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Niewłaściwy format pliku" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Plik \"%s\" zawiera niewłaściwe dane." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Nieznane dane" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Nieznana wersja danych" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Nie można wykryć typu pliku." #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Nie można otworzyć pliku" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Zapis nie posiada hasła do skopiowania" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Hasło skopiowane do schowka" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Zapisy skopiowane" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Wytnij zapisy" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Zapisy wycięte" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Wklej zapisy" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Zapisy wklejone" #: src/revelation.py:1186 msgid "Add entry" msgstr "Dodaj zapis" #: src/revelation.py:1192 msgid "Entry added" msgstr "Zapis dodany" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Dodawanie zapisu anulowane" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Modyfikuj katalog" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Modyfikuj zapis" #: src/revelation.py:1218 msgid "Update entry" msgstr "Uaktualnij zapis" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Zapis uaktualniony" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Modyfikacja zapisu anulowana" #: src/revelation.py:1251 msgid "Folder added" msgstr "Katalog dodany" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Dodawanie katalogu anulowane" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Nie znaleziono polecenia idź do w %s zapisach" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Zapis otwarty" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Niewłaściwy format polecenia idź do" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Brak danych zapisu" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Przemieść zapis" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Zapisy przemieszczone" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Usuń zapis" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Zapisy usunięte" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Usuwanie zapisu anulowane" #: src/revelation.py:1372 msgid "Password changed" msgstr "Zmieniono hasło" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Zmiana hasła anulowana" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Dane wyeksportowane do %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Eksport anulowany" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Nie można zapisać do pliku" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Eksport nieudany" #: src/revelation.py:1435 msgid "Import data" msgstr "Importuj dane" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Dane zaimportowane z %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Import anulowany" #: src/revelation.py:1474 msgid "Locked" msgstr "Zablokowany" #: src/revelation.py:1475 msgid "File locked" msgstr "Plik zablokowany" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Wyjście zablokowane ze względu na niezapisane zmiany" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Plik odblokowany" #: src/revelation.py:1521 msgid "New file created" msgstr "Utworzono nowy plik" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Anulowana utworzenie nowego pliku" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Otwarto plik %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Dane zapisane do pliku %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Zapis anulowany" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Nie można zapisać pliku" #: src/revelation.py:1576 msgid "Save failed" msgstr "Zapis nieudany" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Wyjście anulowane" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s powtórzone" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s cofnięte" #: src/revelation.py:1648 msgid "Preferences" msgstr "Preferencje" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: znak \"%\"" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: opcjonalna zmienna" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): opcjonalny podciąg znaków" revelation-revelation-0.5.6/po/pt_BR.po000066400000000000000000001515741510620476600200500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: # Joacelio Moura de Lucena , 2012-2013,2015,2020-2021 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Joacelio Moura de Lucena , 2012-2013,2015,2020-2021\n" "Language-Team: Portuguese (Brazil) (http://app.transifex.com/revelation/revelation/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Gestor de Senhas" #: data/info.olasagasti.revelation.desktop.in.in:4 msgid "Organize and secure your passwords" msgstr "Organize e proteja suas senhas" #: 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 "Carrega um arquivo automaticamente 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 msgid "A file to autoload on startup" msgstr "Um arquivo para carregar automaticamente 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 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "Gestor de Senhas" #: data/info.olasagasti.revelation.metainfo.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 "O Revelation é um gestor de senhas para a área de trabalho do GNOME, lançado sob licença GNU GPL. Ele armazena todas as suas contas e senhas em um lugar simples e lhe dá acesso a elas através de uma interface gráfica amigável." #: data/info.olasagasti.revelation.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "Entre outros recursos o Revelation é capaz de:" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "Armazena senhas criptografadas" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "Armazena senhas organizadas" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "Bloqueia automaticamente quando ocioso ou ao bloquear a área de trabalho" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "Importa de e exporta para diferentes formatos de arquivo" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "Uma simples interface de usuário" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "Múltiplas categorias de entrada para armazenar senhas" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "Busca de entradas por múltiplos critérios" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "Janela de atalhos" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "O nome da entrada" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Uma descrição da entrada" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "O tipo da entrada" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Notas" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Pasta" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "O nome da pasta" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Uma descrição da pasta" #: data/ui/help-overlay.ui:13 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 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 "Seleção" #: data/ui/help-overlay.ui:121 msgctxt "shortcut window" msgid "Select all entries" msgstr "Seleciona todas as entradas" #: data/ui/help-overlay.ui:128 msgctxt "shortcut window" msgid "Deselect all entries" msgstr "Tira a seleção de todas as entradas" #: data/ui/help-overlay.ui:137 msgctxt "shortcut window" msgid "Finding password entry" msgstr "" #: data/ui/help-overlay.ui:141 msgctxt "shortcut window" msgid "Show the search bar" msgstr "Exibe a barra de pesquisa" #: data/ui/help-overlay.ui:148 msgctxt "shortcut window" msgid "Hide the search bar" msgstr "Esconde a barra de pesquisa" #: data/ui/help-overlay.ui:155 msgctxt "shortcut window" msgid "Find the next match" msgstr "Encontra a próxima correspondência" #: data/ui/help-overlay.ui:162 msgctxt "shortcut window" msgid "Find the previous match" msgstr "" #: data/ui/help-overlay.ui:171 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 msgctxt "shortcut window" msgid "Quit" msgstr "" #: data/ui/menubar.ui:5 msgid "_File" msgstr "Ar_quivo" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Novo" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Abrir" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Salvar" #: 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:46 msgid "_Lock" msgstr "_Bloquear" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importar" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "Exportar" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "Fe_char" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Terminar" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Editar" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Desfazer" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Refazer" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Re_mover" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Ir" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Verificador de senha" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Digite uma senha para ser verificada" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "O resultado da verificação" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Gerador de Senha" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "A senha gerada" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 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" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Use caracteres de pontuação para as senhas" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Quando as senhas são geradas, usa caracteres de pontuação como %, =, { ou ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Ação de duplo clique" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Vai para conta, se possível" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Edita conta" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Edita a conta com duplo clique" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Copia a senha para a área de transferência" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Copia a senha da conta para a área de transferência com duplo clique" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Arquivos" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Abrir arquivo ao iniciar:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Selecione Arquivo para Abrir Automaticamente" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Arquivo a ser aberto quando o Revelation for iniciado" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Salvar automaticamente os dados quando alterados" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Bloquear arquivo quando estiver inativo" #: data/ui/preferences-files.ui:66 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" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "O período de inatividade antes de bloquear o arquivo, em minutos" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minutos" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Senhas" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Exibe senhas e outros segredos" #: data/ui/preferences-passwords.ui:21 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 ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Também copia o nome de usuário quando copiar a senha" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Estilo da barra de ferramentas" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Usar padrão do desktop" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Exibe itens da barra de ferramentas com o estilo padrão" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Exibir ícones e texto" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Exibe itens da barra de ferramentas com ambos ícones e texto" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Exibir ícones e texto importante" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Exibe ítens da barra de ferramentas com o texto junto de ícones importantes" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Exibir apenas ícones" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Exibe itens da barra de ferramentas com ícones apenas" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Exibir apenas texto" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Exibe itens da barra de ferramentas com texto apenas" #: data/ui/preferences.ui:17 msgid "General" msgstr "Geral" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Interface" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Comandos \"Ir para\"" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Texto a pesquisar" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Encontrar a combinação anterior" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Encontre a próxima combinação" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Abrir um arquivo" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Salvar dados em um arquivo" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Adicionar Entrada" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Criar uma nova entrada" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Adiciona pasta" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Criar uma pasta" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Ir para as entradas selecionadas" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Editar a entrada selecionada" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Remover as entradas selecionadas" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Lista de contas Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Lista de contas" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Criado:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Versão do Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Arquivo alterado" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Descartar" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Salvar alterações no arquivo atual?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Salvar alterações antes de abrir?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Salvar alterações antes de sair?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "Salvar alterações antes de fechar?" #: src/lib/dialog.py:302 msgid "" "You have made changes which have not been saved. If you close without " "saving, then these changes will be lost." msgstr "Você fez alterações que não foram salvas. Se você criar um arquivo sem salvar estas alterações serão perdidas." #: src/lib/dialog.py:311 msgid "Replace existing file?" msgstr "Substituir arquivo existente?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Salvar em arquivo inseguro?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Selecione Arquivo para Exportar" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Tipo de arquivo" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Selecione Arquivo para Importar" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Detectar automaticamente" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Selecione Arquivo para Abrir" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Arquivos Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Todos os arquivos" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Selecione Arquivo para Salvar" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Digite nova senha" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Senha incorreta" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Senhas não combinam" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Usar senha insegura?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Informe senha para desbloquear arquivo" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Informe a senha do arquivo" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Informe a senha para o arquivo" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "As senhas que você informou não combinam" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Nenhuma senha informada" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Dados da conta" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Notas para a entrada" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Nome não informado" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Você deve informar um nome para a conta" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Remover realmente as %i entradas seleciondas?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Remover realmente a pasta '%s'?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Remover realmente a conta '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Por favor confirme que você deseja remover esta conta." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Você deve digitar um nome para a pasta" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Um gestor de senhas para o desktop GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Erro desconhecido" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "A senha parece ser boa" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "A senha %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Cartão de Crédito" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Chave de Criptografia" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Banco de Dados" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Trava de Porta" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Email" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Genérica" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefone" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Desktop Remoto" #: src/lib/entry.py:338 msgid "Website" msgstr "Sítio Web" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Número de cartão" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Tipo de cartão" #: src/lib/entry.py:420 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:430 msgid "CCV number" msgstr "Número CCV" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certificado" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Um certificado, tal qual um Certificado SSL X.509" #: src/lib/entry.py:452 msgid "Code" msgstr "Código" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Um código usado para fornecer acesso a algo" #: src/lib/entry.py:464 msgid "A database name" msgstr "Um nome de banco de dados" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domínio" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "Um endereço de email" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Data de expiração" #: src/lib/entry.py:497 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:507 msgid "Hostname" msgstr "Hostname" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Arquivo de Chave" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Local" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Um local físico, tal qual a entrada do escritório" #: src/lib/entry.py:540 msgid "Password" msgstr "Senha" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Número de telefone" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Um número de telefone" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Número da porta" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 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:595 msgid "Username" msgstr "Nome de usuário" #: src/lib/entry.py:596 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:37 msgid "_Continue" msgstr "_Continuar" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Gerar" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Adicionar Entrada" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Adicionar Pasta" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Alterar" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Recarregar" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Substituir" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Desbloquear" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "At_ualizar" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Copiar senha" #: src/lib/ui.py:432 msgid "Select File" msgstr "Selecionar arquivo" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Navegar..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Gerar" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Notas: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Atualizado há %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Qualquer tipo" #: src/lib/util.py:56 msgid "is too short" msgstr "é muito curta" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "não é bastante variada" #: src/lib/util.py:89 msgid "is too weak" msgstr "é muito fraca" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "é um palíndromo" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i segundos" #: src/lib/util.py:318 msgid "years" msgstr "anos" #: src/lib/util.py:318 msgid "year" msgstr "ano" #: src/lib/util.py:326 msgid "months" msgstr "meses" #: src/lib/util.py:326 msgid "month" msgstr "mês" #: src/lib/util.py:330 msgid "weeks" msgstr "semanas" #: src/lib/util.py:330 msgid "week" msgstr "semana" #: src/lib/util.py:334 msgid "days" msgstr "dias" #: src/lib/util.py:334 msgid "day" msgstr "dia" #: src/lib/util.py:338 msgid "hours" msgstr "horas" #: src/lib/util.py:338 msgid "hour" msgstr "hora" #: src/lib/util.py:342 msgid "minute" msgstr "minuto" #: src/lib/util.py:346 msgid "seconds" msgstr "segundos" #: src/lib/util.py:346 msgid "second" msgstr "segundo" #: src/revelation.py:89 msgid "Missing data files" msgstr "Arquivos de dados omissos" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Alguns dos arquivos de sistema do Revelation não foram encontrados, por favor reinstale o Revelation." #: src/revelation.py:93 msgid "Missing configuration data" msgstr "Configuração de dados omissa" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Arquivos de dados inválidos" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Novo arquivo" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Desfazer %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Refazer %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Abertura cancelada" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "Correspondência encontrada para '%s'" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "Nenhuma correspondência encontrada para '%s'" #: src/revelation.py:1041 msgid "Old file format" msgstr "Formato de arquivo antigo" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Abertura falhou" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Formato de aquivo inválido" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "O arquivo '%s' contém dados inválidos" #: src/revelation.py:1057 msgid "Unknown data" msgstr "Dados desconhecidos" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Versão desconhecida de dados" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Incapaz de detectar o tipo de arquivo" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Incapaz de abrir arquivo" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "A entrada não possui senha a ser copiada" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Senha copiada para a área de transferência" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Entradas copiadas" #: src/revelation.py:1144 msgid "Cut entries" msgstr " Corta entradas" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Entradas cortadas" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Cola entradas" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Entradas coladas" #: src/revelation.py:1186 msgid "Add entry" msgstr "Adicionar Entrada" #: src/revelation.py:1192 msgid "Entry added" msgstr "Entrada adicionada" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Adição de entrada cancelada" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Edita Pasta" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Edita entrada" #: src/revelation.py:1218 msgid "Update entry" msgstr "Atualiza entrada" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Entrada atualizada" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Edição de entrada cancelada" #: src/revelation.py:1251 msgid "Folder added" msgstr "Pasta adicionada" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Adição de pasta cancelada" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Nenhum comando \"ir para\" encontrado para as entradas %s" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Entrada aberta" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Formato inválido do comando \"ir para\"" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Entrada de dados omissa" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Move entradas" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Entradas movidas" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Remove entrada" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Entradas removidas" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Remoção de entrada cancelada" #: src/revelation.py:1372 msgid "Password changed" msgstr "Senha alterada" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Alteração de senha cancelada" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "Arquivo fechado %s" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "Fechamento de arquivo cancelado" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Dados exportados para '%s'" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Exportação cancelada" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Incapaz de escrever no arquivo" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Exportação falhou" #: src/revelation.py:1435 msgid "Import data" msgstr "Importa dados" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Dados importados de %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Importação cancelada" #: src/revelation.py:1474 msgid "Locked" msgstr "Bloqueado" #: src/revelation.py:1475 msgid "File locked" msgstr "Arquivo bloqueado" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Saída desabilitada devido a alterações não-salvas" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Arquivo desbloqueado" #: src/revelation.py:1521 msgid "New file created" msgstr "Novo arquivo criado" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Novo arquivo cancelado" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Arquivo aberto %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Dados salvos no arquivo %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Salvamento cancelado" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Incapaz de salvar arquivo" #: src/revelation.py:1576 msgid "Save failed" msgstr "Salvamento falhou" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Saída cancelada" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s refeito" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s desfeito" #: src/revelation.py:1648 msgid "Preferences" msgstr "Preferências" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "%%: um símbolo \"%\"" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: variável de expansão opcional" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): subpalavra de expansão opcional" revelation-revelation-0.5.6/po/ru.po000066400000000000000000001621231510620476600174600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Yuri Myasoedov , 2012\n" "Language-Team: Russian (http://app.transifex.com/revelation/revelation/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Менеджер паролей" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Имя записи" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Описание записи" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Тип записи" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Примечания" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Папка" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Имя папки" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Описание папки" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Открыть" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Сохранить" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Сохранить _как…" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "С_менить пароль…" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "За_блокировать" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Импорт" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Экспорт" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Закрыть" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "В_ыход" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Правка" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Отмена" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "_Удалить" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Сложность пароля" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Введите проверяемый пароль" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Результат проверки" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Создать пароль" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Созданный пароль" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Число символов в создаваемых паролях - рекомендуется 8 и выше" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Используйте символы пунктуации для паролей" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Когда пароль сгенерирован, используйте символы пунктуации %, =, { или ." #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "При двойном щелчке" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Перейти к записи, если возможно" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "Перейти к записи (открыть ее во внешнем приложении), если присутствуют необходимые данные" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Изменить запись" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Изменять запись по двойному щелчку" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Скопировать пароль" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Копировать пароль по двойному щелчку" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Файлы" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Открывать файл при запуске:" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "Автоматически открывать файл при запуске" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Выберите начальный файл" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Файл, который будет открыт при запуске Relevation" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Сохранять файл при изменениях" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "Сохранять файл автоматически при добавлении, изменении или удалении записей" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Блокировать файл через" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Автоматически блокировать файл после простоя" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Время простоя до блокировки файла, в минутах" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "мин." #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Пароли" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Отображать пароли и секретные данные" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "Показывать пароли и другие секретные данные, например PIN-коды (иначе скрывать под звездочками)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Копировать имя пользователя вместе с паролем" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "При копировании пароля также поместить перед ним в очередь имя пользователя" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Вид панели инструментов" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Использовать настройку системы" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Использовать настройку системы" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Значки и текст" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Значки и текст" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Значки и выборочный текст" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Показывать только текст на важных кнопках" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Только значки" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Показывать только значки на кнопках" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Только текст" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Показывать только текст на кнопках" #: data/ui/preferences.ui:17 msgid "General" msgstr "Общие" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Интерфейс" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Команды перехода" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Искомый текст" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Найти предыдущее совпадение" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Найти следующее совпадение" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Открыть файл" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Сохранить текущий файл" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Добавить запись" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Добавить новую запись" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Добавление папки" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Добавить новую папку" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Перейти к выделенным записям" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Изменение выбранной записи" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Список записей Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Список записей" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Создан:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Версия Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Файл был изменен" #: src/lib/dialog.py:223 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Текущий файл «%s» был изменен. Перезагрузить его?" #: src/lib/dialog.py:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "Не сохран_ять" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Сохранить изменения в текущем файле?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Сохранить изменения перед открытием?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Сохранить изменения перед выходом?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Заменить существующий файл?" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Файл «%s» уже существует, вы хотите его заменить?" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "Сохранить в ненадежный файл?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Экспортировать в файл" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Тип файла" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Выберите импортируемый файл" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Определить автоматически" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Выберите открываемый файл" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Файлы Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Все файлы" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Выберите файл для сохранения" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Введите новый пароль" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Неверный пароль" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "Указанный текущий пароль файла неверен." #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Пароли не совпадают" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Пароль и его подтверждение не совпадают." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Использовать небезопасный пароль?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Введите пароль для снятия блокировки файла" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Текущий файл был заблокирован. Введите пароль для снятия блокировки." #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "Введен неверный пароль, введите его заново." #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Введите пароль к файлу" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Введите пароль файла" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Введенные пароли не совпадают." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Не указан пароль" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "Укажите пароль для нового файла." #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Подробности" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Примечания для записи" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Укажите название" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Необходимо указать название записи" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Удалить выделенные элементы (%i шт.)?" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Удалив эти записи, вы также удалите содержащиеся в них вложенные записи." #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Удалить папку «%s»?" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "Удалив эту папку, вы также удалите хранящиеся в ней записи и подпапки." #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "Удалить запись «%s»?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Подтвердите удаление записи" #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Необходимо указать название папки" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Хранилище паролей для среды GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Неизвестная ошибка" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Пароль кажется надежным" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Пароль %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Кредитная карта" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Криптографический ключ" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "База данных" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Код замка" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Электронная почта" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Обычный" #: src/lib/entry.py:289 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:304 msgid "Shell" msgstr "Сеанс оболочки" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Удалённый рабочий стол" #: src/lib/entry.py:338 msgid "Website" msgstr "Веб-сайт" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Номер карты" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Номер кредитной карты, обычно 16-значное число" #: src/lib/entry.py:419 msgid "Card type" msgstr "Тип карты" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Тип кредитной карты, например MasterCard или VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "Код CCV" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "Проверочный номер карты, обычно это 3-цифры расположенные на обратной стороне карты" #: src/lib/entry.py:441 msgid "Certificate" msgstr "Сертификат" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Сертификат, например X.509 для SSL" #: src/lib/entry.py:452 msgid "Code" msgstr "Код" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Код для доступа к чему-либо" #: src/lib/entry.py:464 msgid "A database name" msgstr "Имя базы данных" #: src/lib/entry.py:474 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "Интернет- или сетевой домен, например organisation.org или название домена Windows" #: src/lib/entry.py:486 msgid "An email address" msgstr "Адрес электронной почты" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Истекает" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Месяц, в котором истекает эта кредитная карта" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Сервер" #: src/lib/entry.py:508 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Имя компьютера, например computer.domain.com или MOIKOMPYUTER" #: src/lib/entry.py:518 msgid "Key File" msgstr "Файл ключа" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Место" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Место, например проходная" #: src/lib/entry.py:540 msgid "Password" msgstr "Пароль" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "Секретное слово или комбинация символов, используемая для предоставления доступа." #: src/lib/entry.py:551 msgid "Phone number" msgstr "Номер телефона" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Номер телефона" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN-код" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "Цифровой код, используемый в кредитных картах, мобильных телефонах и т. п." #: src/lib/entry.py:573 msgid "Port number" msgstr "Порт" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Номер порта сетевой службы, используется для прямого доступа к ней" #: src/lib/entry.py:584 msgid "URL" msgstr "Адрес" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Единообразный локатор (определитель местонахождения) ресурса" #: src/lib/entry.py:595 msgid "Username" msgstr "Имя пользователя" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Имя или другая опознавательная информация" #: src/lib/ui.py:37 msgid "_Continue" msgstr "Про_должить" #: src/lib/ui.py:42 msgid "_Generate" msgstr "Со_здать" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Добавить" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "Добавить п_апку" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Изменить" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "Пе_резагрузить" #: src/lib/ui.py:56 msgid "_Replace" msgstr "За_менить" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "Раз_блокировать" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "О_бновить" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Копирование пароля" #: src/lib/ui.py:432 msgid "Select File" msgstr "Выберите файл" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Обзор…" #: src/lib/ui.py:569 msgid "Generate" msgstr "Создать" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Примечания: " #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Обновлена %s назад" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Любой тип" #: src/lib/util.py:56 msgid "is too short" msgstr "слишком короткий" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "слишком однообразен" #: src/lib/util.py:89 msgid "is too weak" msgstr "слишком слабый" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "является палиндромом" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i сек." #: src/lib/util.py:318 msgid "years" msgstr "лет" #: src/lib/util.py:318 msgid "year" msgstr "год" #: src/lib/util.py:326 msgid "months" msgstr "мес." #: src/lib/util.py:326 msgid "month" msgstr "мес." #: src/lib/util.py:330 msgid "weeks" msgstr "нед." #: src/lib/util.py:330 msgid "week" msgstr "нед." #: src/lib/util.py:334 msgid "days" msgstr "дн." #: src/lib/util.py:334 msgid "day" msgstr "день" #: src/lib/util.py:338 msgid "hours" msgstr "час." #: src/lib/util.py:338 msgid "hour" msgstr "час" #: src/lib/util.py:342 msgid "minute" msgstr "мин." #: src/lib/util.py:346 msgid "seconds" msgstr "сек." #: src/lib/util.py:346 msgid "second" msgstr "сек." #: src/revelation.py:89 msgid "Missing data files" msgstr "Отстутствуют файлы данных" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Некоторые файлы Revelation отсутствуют. Переустановите Revelation." #: src/revelation.py:93 msgid "Missing configuration data" msgstr "Отсутствуют данные конфигурации" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation не может найти данные конфигурации. Переустановите Revelation." #: src/revelation.py:97 msgid "Invalid data files" msgstr "Неверные файлы данных" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "Некоторые файлы Revelation содержат неверные данные. Переустановите Revelation." #: src/revelation.py:580 msgid "New file" msgstr "Новый файл" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Отменить %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "П_овторить %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Открытие отменено" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Старый формат файла" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Указан неверный пароль для файла «%s»." #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Ошибка при открытии" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Неверный формат файла" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Файл «%s» содержит неверные данные." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Неизвестные данные" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Неизвестная версия данных" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "У файла «%s» более новая версия. Обновите Revelation, чтобы его открыть." #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "Не удалось распознать тип файла" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Не удалось открыть файл" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "У данной записи отсутствует пароль" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Пароль был скопирован в Буфер обмена" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Записи скопированы" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Вырезать записи" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Записи вырезаны" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Вставку записей" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Записи вставлены" #: src/revelation.py:1186 msgid "Add entry" msgstr "Добавление записи" #: src/revelation.py:1192 msgid "Entry added" msgstr "Запись добавлена" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Добавление записи отменено" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Изменение папки" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Изменение записи" #: src/revelation.py:1218 msgid "Update entry" msgstr "Обновить запись" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Запись была обновлена" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Добавление записи отменено" #: src/revelation.py:1251 msgid "Folder added" msgstr "Папка успешно добавлена" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Добавление папки отменено" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Не найдена команда перехода для записей типа %s" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Запись успешно открыта" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Неверный формат команды перехода" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "Команда перехода для записей типа «%s» неверна. Исправьте ее в диалоге настроек." #: src/revelation.py:1296 msgid "Missing entry data" msgstr "Отсутствуют данные в записи" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "Запись «%s» не содержит достаточно данных для перехода к ней." #: src/revelation.py:1316 msgid "Move entry" msgstr "Перемещение записей" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Записи перемещены" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Удаление записи" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Записи удалены" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Отменено открытие записи" #: src/revelation.py:1372 msgid "Password changed" msgstr "Пароль изменён" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Смена пароля отменена" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Успешный экспорт в %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Экспорт отменен" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Не удалось записать данные в файл" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Ошибка при экспорте" #: src/revelation.py:1435 msgid "Import data" msgstr "Импорт данных" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Данные из %s успешно импортированы" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Импорт был отменен" #: src/revelation.py:1474 msgid "Locked" msgstr "Заблокировано" #: src/revelation.py:1475 msgid "File locked" msgstr "Файл заблокирован" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Выход невозможен из-за несохраненных изменений" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Файл был разблокирован" #: src/revelation.py:1521 msgid "New file created" msgstr "Создан новый файл" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Создание файла отменено" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Файл %s успешно открыт" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Успешное сохранение в файл %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Сохранение отменено" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Не удалось сохранить файл" #: src/revelation.py:1576 msgid "Save failed" msgstr "Не удалось сохранить файл" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Выход отменен" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "Повторено действие: %s" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s отменено" #: src/revelation.py:1648 msgid "Preferences" msgstr "Настройки" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "Команда перехода для записей типа %s. Можно использовать следующие переменные:" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: необязательная переменная" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): необязательный фрагмент" revelation-revelation-0.5.6/po/sr_RS.po000066400000000000000000001250061510620476600200610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Ivan Petrović , 2013-2014\n" "Language-Team: Serbian (Serbia) (http://app.transifex.com/revelation/revelation/language/sr_RS/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr_RS\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" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Директоријум" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "" #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "" #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Генератор лозинки" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Генерисана лозинка" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Број карактера за генерисање лозинке - препоручљиво 8 или више карактера" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "" #: data/ui/preferences.ui:17 msgid "General" msgstr "" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Датотека је промењена" #: src/lib/dialog.py:223 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "" #: src/lib/dialog.py:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "" #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "" #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, python-format msgid "" "The password you entered is not secure; %s. Are you sure you want to use it?" msgstr "" #: src/lib/dialog.py:649 msgid "Enter password to unlock file" msgstr "" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "" #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "" #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "" #: src/lib/dialog.py:844 msgid "Account Data" msgstr "" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "" #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "" #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "" #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Урапвљач лозинки за ГНОМ окружење" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Непозната грешка" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Кредитна картица" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Кључ за шифровање" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "База" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Код за браву" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Е-пошта" #: src/lib/entry.py:256 msgid "FTP" msgstr "ФТП" #: src/lib/entry.py:273 msgid "Generic" msgstr "Генеричка" #: src/lib/entry.py:289 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:304 msgid "Shell" msgstr "Конзола" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Ураљена радна површ" #: src/lib/entry.py:338 msgid "Website" msgstr "Веб сајт" #: src/lib/entry.py:355 msgid "VNC" msgstr "ВНЦ" #: src/lib/entry.py:408 msgid "Card number" msgstr "Број картице" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Број картице, обично 16-цифрени број" #: src/lib/entry.py:419 msgid "Card type" msgstr "Врста картице" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Врста картице, као нпр. МастерКард или ВИЗА" #: src/lib/entry.py:430 msgid "CCV number" msgstr "" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "" #: src/lib/entry.py:441 msgid "Certificate" msgstr "Сертификат" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "" #: src/lib/entry.py:452 msgid "Code" msgstr "" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "" #: src/lib/entry.py:464 msgid "A database name" msgstr "Име базе" #: src/lib/entry.py:474 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "" #: src/lib/entry.py:486 msgid "An email address" msgstr "Е-адреса" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Датум истека" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "" #: src/lib/entry.py:507 msgid "Hostname" msgstr "" #: src/lib/entry.py:508 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "" #: src/lib/entry.py:518 msgid "Key File" msgstr "" #: src/lib/entry.py:519 msgid "" "A key file, used for authentication for example via ssh or to encrypt X.509 " "certificates" msgstr "" #: src/lib/entry.py:529 msgid "Location" msgstr "" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "" #: src/lib/entry.py:540 msgid "Password" msgstr "" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "" #: src/lib/entry.py:551 msgid "Phone number" msgstr "" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "" #: src/lib/entry.py:562 msgid "PIN" msgstr "" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "" #: src/lib/entry.py:573 msgid "Port number" msgstr "" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "" #: src/lib/entry.py:584 msgid "URL" msgstr "" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "" #: src/lib/entry.py:595 msgid "Username" msgstr "" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "" #: src/lib/ui.py:37 msgid "_Continue" msgstr "" #: src/lib/ui.py:42 msgid "_Generate" msgstr "" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "" #: src/lib/ui.py:56 msgid "_Replace" msgstr "" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "" #: src/lib/ui.py:432 msgid "Select File" msgstr "" #: src/lib/ui.py:439 msgid "Browse..." msgstr "" #: src/lib/ui.py:569 msgid "Generate" msgstr "" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "" #: src/lib/ui.py:1212 msgid "Any type" msgstr "" #: src/lib/util.py:56 msgid "is too short" msgstr "" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "" #: src/lib/util.py:89 msgid "is too weak" msgstr "" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "" #: src/lib/util.py:318 msgid "years" msgstr "" #: src/lib/util.py:318 msgid "year" msgstr "" #: src/lib/util.py:326 msgid "months" msgstr "" #: src/lib/util.py:326 msgid "month" msgstr "" #: src/lib/util.py:330 msgid "weeks" msgstr "" #: src/lib/util.py:330 msgid "week" msgstr "" #: src/lib/util.py:334 msgid "days" msgstr "" #: src/lib/util.py:334 msgid "day" msgstr "" #: src/lib/util.py:338 msgid "hours" msgstr "" #: src/lib/util.py:338 msgid "hour" msgstr "" #: src/lib/util.py:342 msgid "minute" msgstr "" #: src/lib/util.py:346 msgid "seconds" msgstr "" #: src/lib/util.py:346 msgid "second" msgstr "" #: src/revelation.py:89 msgid "Missing data files" msgstr "" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:97 msgid "Invalid data files" msgstr "" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "" #: src/revelation.py:580 msgid "New file" msgstr "" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "" #: src/revelation.py:1057 msgid "Unknown data" msgstr "" #: src/revelation.py:1057 #, python-format msgid "" "The file '%s' contains unknown data. It may have been created by a newer " "version of Revelation." msgstr "" #: src/revelation.py:1061 msgid "Unknown data version" msgstr "" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "" #: src/revelation.py:1123 msgid "Entries copied" msgstr "" #: src/revelation.py:1144 msgid "Cut entries" msgstr "" #: src/revelation.py:1151 msgid "Entries cut" msgstr "" #: src/revelation.py:1165 msgid "Paste entries" msgstr "" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "" #: src/revelation.py:1186 msgid "Add entry" msgstr "" #: src/revelation.py:1192 msgid "Entry added" msgstr "" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "" #: src/revelation.py:1218 msgid "Update entry" msgstr "" #: src/revelation.py:1223 msgid "Entry updated" msgstr "" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "" #: src/revelation.py:1251 msgid "Folder added" msgstr "" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "" #: src/revelation.py:1316 msgid "Move entry" msgstr "" #: src/revelation.py:1324 msgid "Entries moved" msgstr "" #: src/revelation.py:1350 msgid "Remove entry" msgstr "" #: src/revelation.py:1356 msgid "Entries removed" msgstr "" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "" #: src/revelation.py:1435 msgid "Import data" msgstr "" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "" #: src/revelation.py:1474 msgid "Locked" msgstr "" #: src/revelation.py:1475 msgid "File locked" msgstr "" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "" #: src/revelation.py:1500 msgid "File unlocked" msgstr "" #: src/revelation.py:1521 msgid "New file created" msgstr "" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "" #: src/revelation.py:1576 msgid "Save failed" msgstr "" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "" #: src/revelation.py:1648 msgid "Preferences" msgstr "" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/sv.po000066400000000000000000001437451510620476600174730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Swedish (http://app.transifex.com/revelation/revelation/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Namnet på posten" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "En beskrivning av posten" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Posttypen" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Mapp" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Namnet på mappen" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "En beskrivning av mappen" #: data/ui/help-overlay.ui:13 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 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 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 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 "_Arkiv" #: data/ui/menubar.ui:8 msgid "_New" msgstr "_Ny" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Öppna" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Spara" #: 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:46 msgid "_Lock" msgstr "_Lås" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Importera" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Exportera" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Stäng" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "_Avsluta" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "R_edigera" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Ångra" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "_Gör om" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Ta _bort" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "_Gå till" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Lösenordskontrollerare" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Ange ett lösenord att kontrollera" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Resultatet av kontrollen" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Lösenordsgenerator" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Det genererade lösenordet" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Antalet tecken i genererade lösenord - 8 eller fler rekommenderas" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Dubbelklicksåtgärd" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Gå till kontot, om möjligt" #: data/ui/preferences-doubleclick.ui:21 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" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Redigera konto" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Redigera kontot vid dubbelklick" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Kopiera lösenordet till urklipp" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Kopiera kontots lösenord till urklipp vid dubbelklick" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Filer" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Öppna fil vid uppstart:" #: data/ui/preferences-files.ui:25 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" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Välj fil att öppna automatiskt" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Fil att öppna när Revelation startas" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Spara data automatiskt när det ändras" #: data/ui/preferences-files.ui:52 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" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Lås fil efter inaktivitetsperioden" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Lås automatiskt datafilen efter en tidsperiods inaktivitet" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Tidsperioden för inaktivitet innan en fil låses, i minuter" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "minuter" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Lösenord" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Visa lösenord och andra hemligheter" #: data/ui/preferences-passwords.ui:21 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 ****)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Kopiera även användarnamn när lösenord kopieras" #: data/ui/preferences-passwords.ui:31 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" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Verktygsradstil" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Använd skrivbordets standard" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Visa verktygsobjekt med standardstil" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Visa ikoner och text" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Visa verktygsobjekt med både ikoner och text" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Visa ikoner och viktig text" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Visa verktygsobjekt med text bredvid viktiga ikoner" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Visa endast ikoner" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Visa verktygsobjekt med endast ikoner" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Visa endast text" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Visa verktygsobjekt med endast text" #: data/ui/preferences.ui:17 msgid "General" msgstr "Allmänt" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Gränssnitt" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Gå till-kommandon" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Text att söka efter" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Hitta föregående träff" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Hitta nästa träff" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Öppna en fil" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Spara data till en fil" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Lägg till post" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Skapa en ny post" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Lägg till mapp" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Skapa en ny mapp" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Gå till markerade poster" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Redigera markerad post" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" msgstr "Ta bort de markerade posterna" #: 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation kontolista" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Kontolista" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Skapad:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation version:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Filen har ändrats" #: src/lib/dialog.py:223 #, 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:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Förkasta" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Spara ändringar till aktuell fil?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Spara ändringar innan öppning?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Spara ändringar innan avslut?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Ersätt existerande fil?" #: src/lib/dialog.py:312 #, 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:334 msgid "Save to insecure file?" msgstr "Spara till osäker fil?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Välj fil att exportera till" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Filtyp" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Välj fil att importera" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Detektera automatiskt" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Välj fil att öppna" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation-filer" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Alla filer" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Välj fil att spara till" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Ange nytt lösenord" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Felaktigt lösenord" #: src/lib/dialog.py:615 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:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Lösenorden stämmer inte överens" #: src/lib/dialog.py:618 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:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Använd osäkert lösenord?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Ange lösenordet för att låsa upp filen" #: src/lib/dialog.py:650 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:689 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:707 msgid "Enter file password" msgstr "Ange fillösenord" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Ange lösenordet för filen" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Lösenorden du matade in stämmer inte överens." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Inget lösenord angavs" #: src/lib/dialog.py:781 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:844 msgid "Account Data" msgstr "Kontodata" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Namnet angavs inte" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Du måste ange ett namn för kontot" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Verkligen ta bort de %i markerade posterna?" #: src/lib/dialog.py:980 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:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Verkligen ta bort mappen \"%s\"?" #: src/lib/dialog.py:984 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:987 #, python-format msgid "Really remove account '%s'?" msgstr "Verkligen ta bort kontot \"%s\"?" #: src/lib/dialog.py:988 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:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Du måste ange ett namn för mappen" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "En lösenordshanterare för GNOME-skrivbordet" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Okänt fel" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Lösenordet verkar bra" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Lösenordet %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Kreditkort" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Krypteringsnyckel" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "Databas" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Dörrlås" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "E-post" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Allmän" #: src/lib/entry.py:289 msgid "Phone" msgstr "Telefon" #: src/lib/entry.py:304 msgid "Shell" msgstr "Skal" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "" #: src/lib/entry.py:338 msgid "Website" msgstr "Webbplats" #: src/lib/entry.py:355 msgid "VNC" msgstr "" #: src/lib/entry.py:408 msgid "Card number" msgstr "Kortnummer" #: src/lib/entry.py:409 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:419 msgid "Card type" msgstr "Korttyp" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Typ av kreditkort, exempelvis MasterCard eller VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV-nummer" #: src/lib/entry.py:431 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:441 msgid "Certificate" msgstr "Certifikat" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Ett certifikat, såsom ett X.509-SSL-certifikat" #: src/lib/entry.py:452 msgid "Code" msgstr "Kod" #: src/lib/entry.py:453 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:464 msgid "A database name" msgstr "Ett databasnamn" #: src/lib/entry.py:474 msgid "Domain" msgstr "Domän" #: src/lib/entry.py:475 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:486 msgid "An email address" msgstr "En e-postadress" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Utgångsdatum" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Den månad som kreditkortets giltighetstid går ut" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Värdnamn" #: src/lib/entry.py:508 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:518 msgid "Key File" msgstr "Nyckelfil" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Plats" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "En fysisk plats, såsom en kontorsingång" #: src/lib/entry.py:540 msgid "Password" msgstr "Lösenord" #: src/lib/entry.py:541 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:551 msgid "Phone number" msgstr "Telefonnummer" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Ett telefonnummer" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN-kod" #: src/lib/entry.py:563 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:573 msgid "Port number" msgstr "Portnummer" #: src/lib/entry.py:574 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:584 msgid "URL" msgstr "Url" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "En Uniform Resource Locator, såsom en webbplatsadress" #: src/lib/entry.py:595 msgid "Username" msgstr "Användarnamn" #: src/lib/entry.py:596 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:37 msgid "_Continue" msgstr "_Fortsätt" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Generera" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Lägg till post" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Lägg till mapp" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Ändra" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "_Läs om" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Ersätt" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "_Lås upp" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "_Uppdatera" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Kopiera lösenord" #: src/lib/ui.py:432 msgid "Select File" msgstr "Välj fil" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Bläddra..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Generera" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Uppdaterad %s sedan" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Alla typer" #: src/lib/util.py:56 msgid "is too short" msgstr "är för kort" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "är inte tillräckligt varierad" #: src/lib/util.py:89 msgid "is too weak" msgstr "är för svag" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "är en palindrom" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i sekunder" #: src/lib/util.py:318 msgid "years" msgstr "år" #: src/lib/util.py:318 msgid "year" msgstr "år" #: src/lib/util.py:326 msgid "months" msgstr "månader" #: src/lib/util.py:326 msgid "month" msgstr "månad" #: src/lib/util.py:330 msgid "weeks" msgstr "veckor" #: src/lib/util.py:330 msgid "week" msgstr "vecka" #: src/lib/util.py:334 msgid "days" msgstr "dagar" #: src/lib/util.py:334 msgid "day" msgstr "dag" #: src/lib/util.py:338 msgid "hours" msgstr "timmar" #: src/lib/util.py:338 msgid "hour" msgstr "timme" #: src/lib/util.py:342 msgid "minute" msgstr "minut" #: src/lib/util.py:346 msgid "seconds" msgstr "sekunder" #: src/lib/util.py:346 msgid "second" msgstr "sekund" #: src/revelation.py:89 msgid "Missing data files" msgstr "Saknar datafiler" #: src/revelation.py:89 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:93 msgid "Missing configuration data" msgstr "Saknar konfigurationsdata" #: src/revelation.py:93 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:97 msgid "Invalid data files" msgstr "Ogiltiga datafiler" #: src/revelation.py:97 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:580 msgid "New file" msgstr "Ny fil" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Ångra %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Gör om %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Öppning avbröts" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "" #: src/revelation.py:1041 #, 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:1049 #, 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:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Öppning misslyckades" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Ogiltigt filformat" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Filen \"%s\" innehåller ogiltigt data." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Okänt data" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Okänd dataversion" #: src/revelation.py:1061 #, 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:1065 msgid "Unable to detect filetype" msgstr "Kunde inte identifiera filtyp" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Kunde inte öppna fil" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Posten har inget lösenord att kopiera" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Lösenordet kopierat till urklipp" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Poster kopierade" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Klippa ut poster" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Poster urklippta" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Klistra in poster" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Poster inklistrade" #: src/revelation.py:1186 msgid "Add entry" msgstr "Lägg till post" #: src/revelation.py:1192 msgid "Entry added" msgstr "Post lades till" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Lägg till post avbröts" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Redigera mapp" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Redigera post" #: src/revelation.py:1218 msgid "Update entry" msgstr "Uppdatera post" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Posten uppdaterades" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Redigera post avbröts" #: src/revelation.py:1251 msgid "Folder added" msgstr "Mapp lades till" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Lägg till mapp avbröts" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "Inga gå till-kommando hittades för %s poster" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Posten öppnad" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Ogiltigt format för gå till-kommando" #: src/revelation.py:1293 #, 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:1296 msgid "Missing entry data" msgstr "Saknar data" #: src/revelation.py:1296 #, 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:1316 msgid "Move entry" msgstr "Flytta post" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Poster flyttade" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Ta bort post" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Poster borttagna" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Borttagning av post avbröts" #: src/revelation.py:1372 msgid "Password changed" msgstr "" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Ändring av lösenord avbröts" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Data exporterat till %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Exportering avbröts" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Kunde inte skriva till fil" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Exportering misslyckades" #: src/revelation.py:1435 msgid "Import data" msgstr "Importera data" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Data importerat från %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Importering avbröts" #: src/revelation.py:1474 msgid "Locked" msgstr "Låst" #: src/revelation.py:1475 msgid "File locked" msgstr "Filen är låst" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Avslutning är inaktiverad på grund av osparade ändringar" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Filen är upplåst" #: src/revelation.py:1521 msgid "New file created" msgstr "Ny fil har skapats" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Ny fil avbröts" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Öppnade filen %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Data sparat till filen %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Sparning avbröts" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Kunde inte spara fil" #: src/revelation.py:1576 msgid "Save failed" msgstr "Sparning misslyckades" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Avslutning avbröts" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s omgjorda" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s ogjorda" #: src/revelation.py:1648 msgid "Preferences" msgstr "Inställningar" #: src/revelation.py:1795 #, 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:1801 msgid "%%: a \"%\" sign" msgstr "" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: valfri tilläggsvariabel" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): valfritt substrängstillägg" revelation-revelation-0.5.6/po/uk.po000066400000000000000000001613731510620476600174570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # 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: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Rustam Tsurik , 2013\n" "Language-Team: Ukrainian (http://app.transifex.com/revelation/revelation/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\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" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "Менеджер паролів" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "Ім’я запису" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "Опис запису" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "Тип запису" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "Замітки" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "Папка" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "Ім’я папки" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "Опис папки" #: data/ui/help-overlay.ui:13 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 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 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 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:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "_Відкрити" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "_Зберегти" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "Зберегти _як..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "Змінити _пароль..." #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "_Заблокувати" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "_Імпорт" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "_Експортувати" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "_Закрити" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "Ви_хід" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "_Редагувати" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "_Відмінити" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "Видалити" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "Перевірка пароля" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "Введіть пароль для перевірки" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "Результат перевірки" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "Генератор паролів" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "Згенерований пароль" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "Кількість символів в згенерованому паролі - рекомендовано 8 або більше" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "Використовувати знаки пунктуації в паролях" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "Використовувати знаки пунктуації, наприклад %, =, { або . при генерації пароля" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "Дія за подвійним кліком" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "Перейти в акаунт, якщо можливо" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "Редагувати акаунт" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "Редагувати акаунт при подвійному кліку" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "Копіювати пароль в буфер обміну" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "Копіювати пароль до акаунта в буфер обміну при подвійному кліку" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "Файли" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "Відкривати при запуску:" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "Якщо активовано, цей файл буде відкритий при запуску програми" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "Виберіть файл для автоматичного відкриття" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "Відкривати файл при запуску Revelation" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "Автоматично зберігати дані при зміні" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "Автоматично зберігати файл данних при додаванні, зміні або видаленні записів" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "Заблокувати файл неактивний впродовж" #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "Автоматично блокувати файл після певного періоду неактивності" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "Час неактивності для блокування файлу, в хвилинах" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "хвилин" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "Паролі" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "Показати паролі та іншу секретну інформацію" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "Показувати паролі та інші секретні дані, такі як ПІН коди (у іншому випадку, сховати їх за ******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "Також копіювати ім’я користувача разом з паролем" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "Стиль панелі" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "Стандартний стиль середовища" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "Показати інструменти на панелі з темою за замовчуванням" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "Показати іконки та текст" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "Показати інструменти на панелі з іконками та текстом" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "Показати іконки та важливий текст" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "Показати інструменти на панелі тільки з текстом, за винятком важливих іконок" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "Показати тільки іконки" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "Показати інструменти на панелі тільки з іконками" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "Показати тільки текст" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "Показати інструменти на панелі тільки з текстом" #: data/ui/preferences.ui:17 msgid "General" msgstr "Загальне" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "Інтерфейс" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "Команди переходу" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "Текст для пошуку" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "Знайти попереднє" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "Знайти наступне" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "Відкрити файл" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "Зберегти дані у файл" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "Додати запис" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "Створити новий запис" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "Додати папку" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "Створити нову папку" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "Перейти до вибраних записів" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "Редагувати вибраний запис" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Список акаунтів Revelation" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "Список акаунтів" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "Створено:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Версія Revelation:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "Файл було змінено" #: src/lib/dialog.py:223 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "Поточний файл '%s' було змінено. Бажаєте відкрити змінений файл?" #: src/lib/dialog.py:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "_Відмінити" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "Зберегти зміни у поточний файл?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "Зберегти зміни перед відкриттям?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "Зберегти зміни перед виходом?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "Замінити існуючий файл?" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "Файл '%s' вже існує - бажаєте замінити цей файл?" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "Зберегти в незашифрований файл?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "Виберіть файл для експорту" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "Тип файла" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "Виберіть файл для імпорту" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "Автоматичне визначення" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "Виберіть файл для відкриття" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Файли Revelation" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "Всі файли" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "Виберіть файл для збереження" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "Введіть новий пароль" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "Невірний пароль" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "Пароль який ви ввели для поточного файла невірний." #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "Паролі не збігаються" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "Пароль та його підтвердження яке ви ввели не збігаються." #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "Використати ненадійний пароль?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "Введіть пароль щоб розблокувати файл" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "Поточний файл заблоковано, будь ласка введіть пароль щоб розблокувати його." #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "Невірно введений пароль, будь ласка спробуйте ще раз." #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "Введіть пароль для файла" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "Введіть пароль для файла" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "Введені паролі не збігаються." #: src/lib/dialog.py:781 msgid "No password entered" msgstr "Не введено пароль" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "Ви маєте ввести пароль для нового файла." #: src/lib/dialog.py:844 msgid "Account Data" msgstr "Інформація про акаунт" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "Замітки для запису" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "Ім’я не введено" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "Ви маєте ввести ім’я для акаунта" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "Дійсно видалити %i вибраних записів?" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "Видаляючи ці записи ви також видаляєте всі записи які можуть міститися у них." #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "Дійсно видалити папку '%s'?" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "Видаляючи цю папку ви також видалите всі акаунти та папки що містяться у ній." #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "Дійсно видалити акаунт '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "Будь ласка підтвердіть що ви бажаєте видалити цей акаунт." #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "Ви маєте ввести ім’я для папки" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "Менеджер паролів для середовища GNOME" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "Невідома помилка" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "Пароль придатний до використання" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "Пароль %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "Кредитна картка" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "Ключ шифрування" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "База даних" #: src/lib/entry.py:224 msgid "Door lock" msgstr "Дверний замок" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "Ел. скринька" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "Загальний" #: src/lib/entry.py:289 msgid "Phone" msgstr "Телефон" #: src/lib/entry.py:304 msgid "Shell" msgstr "Шел" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "Віддалений роб. стіл" #: src/lib/entry.py:338 msgid "Website" msgstr "Вебсайт" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "Номер картки" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "Номер кредитної картки, зазвичай 16-значний номер" #: src/lib/entry.py:419 msgid "Card type" msgstr "Тип картки" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "Тип кредитної картки, наприклад MasterCard або VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV код" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "Номер для верифікації картки, зазвичай код з 3-х цифр розташований на зворотній стороні картки" #: src/lib/entry.py:441 msgid "Certificate" msgstr "Сертифікат" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "Сертифікат, наприклад X.509 SSL сертифікат" #: src/lib/entry.py:452 msgid "Code" msgstr "Код" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "Секретний код для доступу до чого-небудь" #: src/lib/entry.py:464 msgid "A database name" msgstr "Ім’я бази даних" #: src/lib/entry.py:474 msgid "Domain" msgstr "Домен" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "Інтернет домен або домен входу, наприклад organization.org або домен Windows" #: src/lib/entry.py:486 msgid "An email address" msgstr "Електронна адреса" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "Термін дії" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "Місяць коли закінчується термін дії картки" #: src/lib/entry.py:507 msgid "Hostname" msgstr "Ім’я хосту" #: src/lib/entry.py:508 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "Ім’я комп’ютера, наприклад computer.domain.com або MYCOMPUTER" #: src/lib/entry.py:518 msgid "Key File" msgstr "Файл ключа" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "Розташування" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "Фізичне розташування, наприклад вхід у офіс" #: src/lib/entry.py:540 msgid "Password" msgstr "Пароль" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "Секретне слово або комбінація символів для доступу" #: src/lib/entry.py:551 msgid "Phone number" msgstr "Телефонний номер" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "Номер телефону" #: src/lib/entry.py:562 msgid "PIN" msgstr "ПІН" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "Персональний Ідентифікаційний Номер, цифровий код, що використовується у кредитних картках, телефонах, та ін." #: src/lib/entry.py:573 msgid "Port number" msgstr "Номер порту" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "Номер порту, що використовується для доступу до мережевих сервісів" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "Уніфікований локатор ресурсів, наприклад, адреса вебсайта" #: src/lib/entry.py:595 msgid "Username" msgstr "Ім’я користувача" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "Ім’я або інший ідентифікатор, що використовується для автентифікації" #: src/lib/ui.py:37 msgid "_Continue" msgstr "_Продовжити" #: src/lib/ui.py:42 msgid "_Generate" msgstr "_Генерувати" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "_Додати запис..." #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "_Додати папку" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "_Змінити" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "Пе_резавантажити" #: src/lib/ui.py:56 msgid "_Replace" msgstr "_Замінити" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "Р_озблокувати" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "О_новити" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "Копіювати пароль" #: src/lib/ui.py:432 msgid "Select File" msgstr "Вибрати файл" #: src/lib/ui.py:439 msgid "Browse..." msgstr "Переглянути..." #: src/lib/ui.py:569 msgid "Generate" msgstr "Згенерувати" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "Замітки" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "Оновлено %s тому" #: src/lib/ui.py:1212 msgid "Any type" msgstr "Будь-який тип" #: src/lib/util.py:56 msgid "is too short" msgstr "надто короткий" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "недостатньо неоднорідний" #: src/lib/util.py:89 msgid "is too weak" msgstr "надто слабкий" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "є паліндромом" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i секунди" #: src/lib/util.py:318 msgid "years" msgstr "років" #: src/lib/util.py:318 msgid "year" msgstr "рік" #: src/lib/util.py:326 msgid "months" msgstr "місяці" #: src/lib/util.py:326 msgid "month" msgstr "місяць" #: src/lib/util.py:330 msgid "weeks" msgstr "тижні" #: src/lib/util.py:330 msgid "week" msgstr "тиждень" #: src/lib/util.py:334 msgid "days" msgstr "днів" #: src/lib/util.py:334 msgid "day" msgstr "день" #: src/lib/util.py:338 msgid "hours" msgstr "годин" #: src/lib/util.py:338 msgid "hour" msgstr "година" #: src/lib/util.py:342 msgid "minute" msgstr "хвилина" #: src/lib/util.py:346 msgid "seconds" msgstr "секунд" #: src/lib/util.py:346 msgid "second" msgstr "секунда" #: src/revelation.py:89 msgid "Missing data files" msgstr "Відсутні файли з даними" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "Деякі з системних файлів Revelations не можуть бути знайдені, будь ласка перевстановіть Revelations." #: src/revelation.py:93 msgid "Missing configuration data" msgstr "Не знайдено дані конфігурації" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation не може знайти дані конфігурації, будь ласка перевстановіть Revelation." #: src/revelation.py:97 msgid "Invalid data files" msgstr "Невірні файли даних" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "Деякі з системних файлів Revelation містять невірні дані, будь ласка перевстановіть Revelation." #: src/revelation.py:580 msgid "New file" msgstr "Новий файл" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "_Відмінити %s" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "_Застосувати %s" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "Відкриття скасовано" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "Старий формат файла" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "Пароль який ви ввели для файла '%s' невірний." #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "Не вдалося відкрити" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "Невірний формат файла" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "Файл '%s' містить невірні дані." #: src/revelation.py:1057 msgid "Unknown data" msgstr "Невідомі дані" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "Невідома версія даних" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "Файл '%s' має занадто новий номер версії, будь-ласка оновіть Revelation щоб відкрити його." #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "Неможливо визначити тип файла" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "Неможливо відкрити файл" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "Запис не має пароля для копіювання" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "Пароль скопійовано в буфер обміну" #: src/revelation.py:1123 msgid "Entries copied" msgstr "Записи скопійовані" #: src/revelation.py:1144 msgid "Cut entries" msgstr "Вирізати записи" #: src/revelation.py:1151 msgid "Entries cut" msgstr "Записи вирізані" #: src/revelation.py:1165 msgid "Paste entries" msgstr "Вставити записи" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "Записи вставлено" #: src/revelation.py:1186 msgid "Add entry" msgstr "Додати запис" #: src/revelation.py:1192 msgid "Entry added" msgstr "Запис додано" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "Додавання запису скасовано" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "Редагувати папку" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "Редагувати запис" #: src/revelation.py:1218 msgid "Update entry" msgstr "Зберегти зміни" #: src/revelation.py:1223 msgid "Entry updated" msgstr "Запис змінено" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "Редагування запису скасовано" #: src/revelation.py:1251 msgid "Folder added" msgstr "Папку додано" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "Додавання папки скасовано" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "" #: src/revelation.py:1290 msgid "Entry opened" msgstr "Запис відкрито" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "Невірний формат команди переходу" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "Відсутні дані для запису" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "Запису '%s' бракує деяких даних, необхідних щоб відкрити його." #: src/revelation.py:1316 msgid "Move entry" msgstr "Перемістити запис" #: src/revelation.py:1324 msgid "Entries moved" msgstr "Записи переміщено" #: src/revelation.py:1350 msgid "Remove entry" msgstr "Видалити запис" #: src/revelation.py:1356 msgid "Entries removed" msgstr "Записи видалені" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "Видалення запису скасовано" #: src/revelation.py:1372 msgid "Password changed" msgstr "Пароль змінено" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "Зміну пароля скасовано" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "Дані експортовано в %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "Експорт скасовано" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "Неможливо записати у файл" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "Невдалий експорт" #: src/revelation.py:1435 msgid "Import data" msgstr "Імпортувати дані" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "Дані імпортовано з %s" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "Імпорт скасовано" #: src/revelation.py:1474 msgid "Locked" msgstr "Заблоковано" #: src/revelation.py:1475 msgid "File locked" msgstr "Файл заблоковано" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "Неможливо вийти через незбережені зміни" #: src/revelation.py:1500 msgid "File unlocked" msgstr "Файл розблоковано" #: src/revelation.py:1521 msgid "New file created" msgstr "Створено новий файл" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "Створення файлу скасовано" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "Відкрито файл %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "Дані збережено в файл %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "Збереження скасовано" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "Неможливо зберегти файл" #: src/revelation.py:1576 msgid "Save failed" msgstr "Не вдалося зберегти" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "Вихід скасовано" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "%s повернене" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "%s відмінене" #: src/revelation.py:1648 msgid "Preferences" msgstr "Налаштування" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "%%: символ \"%\" " #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "" revelation-revelation-0.5.6/po/zh.po000066400000000000000000001442251510620476600174560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the revelation package. # # Translators: # Yue Du , 2013 # Tao Wang , 2006 # Yue Du , 2013,2019,2023 msgid "" msgstr "" "Project-Id-Version: revelation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-11-15 23:12+0100\n" "PO-Revision-Date: 2011-12-11 23:16+0000\n" "Last-Translator: Yue Du , 2013,2019,2023\n" "Language-Team: Chinese (http://app.transifex.com/revelation/revelation/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: data/info.olasagasti.revelation.desktop.in.in:2 #: data/info.olasagasti.revelation.metainfo.xml.in:7 data/ui/about.ui:4 msgid "Revelation" msgstr "Revelation" #: data/info.olasagasti.revelation.desktop.in.in:3 msgid "Password Manager" msgstr "密码管理器" #: data/info.olasagasti.revelation.desktop.in.in:4 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 generic 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/info.olasagasti.revelation.metainfo.xml.in:8 msgid "Password manager" msgstr "" #: data/info.olasagasti.revelation.metainfo.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.metainfo.xml.in:15 msgid "Among other features Revelation is able to:" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:17 msgid "Store passwords encrypted" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:18 msgid "Store passwords organizated" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:19 msgid "Autolock on idle or when desktop locks" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:20 msgid "Import from and export to different file formats" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:29 msgid "A simple user interface" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:33 msgid "Multiple type of entries to store password" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:37 msgid "Search entries by multiple criteria" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:41 msgid "Shortcuts window" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:45 msgid "Adjust the application to give you pace of mind" msgstr "" #: data/info.olasagasti.revelation.metainfo.xml.in:49 msgid "Hide the content when the application is idle" msgstr "" #: data/ui/about.ui:5 msgid "Revelation Website" msgstr "" #: data/ui/entry-edit.ui:8 msgid "Entry" msgstr "" #: data/ui/entry-edit.ui:24 data/ui/folder-edit.ui:24 msgid "Name:" msgstr "" #: data/ui/entry-edit.ui:40 msgid "The name of the entry" msgstr "条目名称" #: data/ui/entry-edit.ui:59 data/ui/folder-edit.ui:59 msgid "Description:" msgstr "" #: data/ui/entry-edit.ui:74 msgid "A description of the entry" msgstr "条目的描述" #: data/ui/entry-edit.ui:93 msgid "Type:" msgstr "" #: data/ui/entry-edit.ui:107 msgid "The type of entry" msgstr "条目类型" #: data/ui/entry-edit.ui:126 src/lib/dialog.py:839 msgid "Notes" msgstr "注释" #: data/ui/folder-edit.ui:8 src/lib/entry.py:161 msgid "Folder" msgstr "文件夹" #: data/ui/folder-edit.ui:40 msgid "The name of the folder" msgstr "文件夹名称" #: data/ui/folder-edit.ui:74 msgid "A description of the folder" msgstr "文件夹的描述" #: data/ui/help-overlay.ui:13 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 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 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 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 "文件 (_F)" #: data/ui/menubar.ui:8 msgid "_New" msgstr "新 (_N)" #: data/ui/menubar.ui:15 data/ui/toolbar.ui:8 src/lib/dialog.py:709 msgid "_Open" msgstr "打开 (_O)" #: data/ui/menubar.ui:24 data/ui/toolbar.ui:16 src/lib/dialog.py:248 #: src/lib/dialog.py:339 src/lib/dialog.py:748 msgid "_Save" msgstr "保存 (_S)" #: data/ui/menubar.ui:31 msgid "Save _as..." msgstr "另存为 (_a) ..." #: data/ui/menubar.ui:40 msgid "Change _Password..." msgstr "改变密码 (_P) ..." #: data/ui/menubar.ui:46 msgid "_Lock" msgstr "锁定 (_L)" #. "revelation-generate" #: data/ui/menubar.ui:55 src/lib/ui.py:43 msgid "_Import" msgstr "导入 (_I)" #: data/ui/menubar.ui:61 src/lib/ui.py:40 msgid "_Export" msgstr "导出 (_E)" #: data/ui/menubar.ui:69 src/lib/dialog.py:1154 src/lib/dialog.py:1231 #: src/revelation.py:1649 msgid "_Close" msgstr "关闭 (_C)" #: data/ui/menubar.ui:76 src/lib/dialog.py:654 src/lib/dialog.py:1125 msgid "_Quit" msgstr "退出 (_Q)" #: data/ui/menubar.ui:85 data/ui/menubar.ui:181 data/ui/popup-tree.ui:6 #: data/ui/toolbar.ui:57 msgid "_Edit" msgstr "编辑 (_E)" #: data/ui/menubar.ui:88 src/revelation.py:592 msgid "_Undo" msgstr "撤销 (_U)" #: data/ui/menubar.ui:95 src/revelation.py:602 msgid "_Redo" msgstr "重复 (_R)" #: 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:188 data/ui/popup-tree.ui:13 data/ui/toolbar.ui:65 msgid "Re_move" msgstr "删除 (_m)" #: data/ui/menubar.ui:195 data/ui/popup-tree.ui:20 data/ui/toolbar.ui:48 msgid "_Go to" msgstr "转到 (_G)" #: 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 "" #: data/ui/message.ui:22 msgid "Message" msgstr "" #: data/ui/password-change.ui:22 msgid "Current password:" msgstr "" #: data/ui/password-change.ui:41 data/ui/password-save.ui:22 msgid "New password:" msgstr "" #: data/ui/password-change.ui:60 data/ui/password-save.ui:41 msgid "Confirm password:" msgstr "" #. Set section title with markup #: data/ui/password-checker.ui:8 src/lib/dialog.py:1152 src/lib/dialog.py:1165 msgid "Password Checker" msgstr "密码检查器" #: data/ui/password-checker.ui:24 data/ui/password-generator.ui:24 #: data/ui/password-lock.ui:18 data/ui/password-open.ui:15 msgid "Password:" msgstr "" #: data/ui/password-checker.ui:34 data/ui/password-checker.ui:64 #: src/lib/dialog.py:1172 src/lib/dialog.py:1195 msgid "Enter a password to check" msgstr "输入一个密码来检查" #: data/ui/password-checker.ui:52 msgid "The result of the check" msgstr "检查的结果" #. Set section title with markup #: data/ui/password-generator.ui:8 src/lib/dialog.py:1229 #: src/lib/dialog.py:1241 msgid "Password Generator" msgstr "密码生成器" #: data/ui/password-generator.ui:38 src/lib/dialog.py:1247 msgid "The generated password" msgstr "生成的密码" #: data/ui/password-generator.ui:60 msgid "Length:" msgstr "" #: data/ui/password-generator.ui:81 data/ui/preferences-passwords.ui:75 msgid "" "The number of characters in generated passwords - 8 or more are recommended" msgstr "生成密码的字符数。建议是8个或者更多。" #: data/ui/password-generator.ui:99 data/ui/preferences-passwords.ui:40 msgid "Use punctuation characters for passwords" msgstr "密码使用标点符号" #: data/ui/password-generator.ui:100 data/ui/preferences-passwords.ui:41 #: src/lib/dialog.py:1257 msgid "" "When passwords are generated, use punctuation characters like %, =, { or ." msgstr "生成密码时使用如 % = { . 等标点符号" #: data/ui/preferences-doubleclick.ui:8 src/revelation.py:1698 msgid "Doubleclick Action" msgstr "双击行为" #: data/ui/preferences-doubleclick.ui:20 msgid "Go to account, if possible" msgstr "如果可能,转到帐户" #: data/ui/preferences-doubleclick.ui:21 msgid "" "Go to the account (open in external application) on doubleclick, if required" " data is filled in" msgstr "如果需要填充数据,在双击时转到帐户 (用外部程序打开)" #: data/ui/preferences-doubleclick.ui:30 msgid "Edit account" msgstr "编辑帐户" #: data/ui/preferences-doubleclick.ui:31 msgid "Edit the account on doubleclick" msgstr "双击时编辑帐户" #: data/ui/preferences-doubleclick.ui:40 msgid "Copy password to clipboard" msgstr "复制密码到剪贴板" #: data/ui/preferences-doubleclick.ui:41 msgid "Copy the account password to clipboard on doubleclick" msgstr "当双击的时候复制帐户密码到剪贴板" #: data/ui/preferences-files.ui:8 src/revelation.py:1735 msgid "Files" msgstr "文件" #: data/ui/preferences-files.ui:24 msgid "Open file on startup:" msgstr "在启动时打开文件" #: data/ui/preferences-files.ui:25 msgid "When enabled, this file will be opened when the program is started" msgstr "当启用后,将会在程序开始时打开这个文件" #: data/ui/preferences-files.ui:34 msgid "Select File to Automatically Open" msgstr "选择自动打开的文件" #: data/ui/preferences-files.ui:35 msgid "File to open when Revelation is started" msgstr "当启动 Revelation 时要打开的文件" #: data/ui/preferences-files.ui:51 msgid "Automatically save data when changed" msgstr "当改动数据时自动保存" #: data/ui/preferences-files.ui:52 msgid "" "Automatically save the data file when an entry is added, modified or removed" msgstr "当添加、修改或者删除条目时,自动保存数据文件" #: data/ui/preferences-files.ui:65 msgid "Lock file when inactive for" msgstr "锁定文件,当不活动 " #: data/ui/preferences-files.ui:66 msgid "Automatically lock the data file after a period of inactivity" msgstr "经过一段时间不活动后,自动锁定数据文件" #: data/ui/preferences-files.ui:82 msgid "The period of inactivity before locking the file, in minutes" msgstr "在锁定文件前不活动的时间(分钟)" #: data/ui/preferences-files.ui:93 src/lib/util.py:342 msgid "minutes" msgstr "分" #: data/ui/preferences-passwords.ui:8 src/revelation.py:1820 msgid "Passwords" msgstr "密码" #: data/ui/preferences-passwords.ui:20 msgid "Display passwords and other secrets" msgstr "显示密码和其他保密信息" #: data/ui/preferences-passwords.ui:21 msgid "" "Display passwords and other secrets, such as PIN codes (otherwise, hide with" " ******)" msgstr "显示密码和其他保密信息,如 PIN 号。 (否则,将仅显示******)" #: data/ui/preferences-passwords.ui:30 msgid "Also copy username when copying password" msgstr "当复制密码时,也复制用户名" #: data/ui/preferences-passwords.ui:31 msgid "" "When the password is copied to clipboard, put the username before the " "password as a clipboard \"chain\"" msgstr "当复制密码到剪贴板时,将用户名放置在密码前,形成剪贴板链。" #: data/ui/preferences-passwords.ui:54 msgid "Length of generated passwords:" msgstr "" #: data/ui/preferences-toolbar.ui:8 src/revelation.py:1856 msgid "Toolbar Style" msgstr "工具栏风格" #: data/ui/preferences-toolbar.ui:20 msgid "Use desktop default" msgstr "使用桌面默认" #: data/ui/preferences-toolbar.ui:21 msgid "Show toolbar items with default style" msgstr "用默认风格显示工具栏子项" #: data/ui/preferences-toolbar.ui:30 msgid "Show icons and text" msgstr "显示图标和文本" #: data/ui/preferences-toolbar.ui:31 msgid "Show toolbar items with both icons and text" msgstr "显示工具条子项的图标和文本" #: data/ui/preferences-toolbar.ui:40 msgid "Show icons and important text" msgstr "显示图标和重要文本" #: data/ui/preferences-toolbar.ui:41 msgid "Show toolbar items with text beside important icons" msgstr "除了重要图标外,还显示工具栏子项的文本" #: data/ui/preferences-toolbar.ui:50 msgid "Show icons only" msgstr "仅显示图标" #: data/ui/preferences-toolbar.ui:51 msgid "Show toolbar items with icons only" msgstr "仅显示工具栏子项的图标" #: data/ui/preferences-toolbar.ui:60 msgid "Show text only" msgstr "仅显示文本" #: data/ui/preferences-toolbar.ui:61 msgid "Show toolbar items with text only" msgstr "仅显示工具栏子项的文本" #: data/ui/preferences.ui:17 msgid "General" msgstr "常规" #: data/ui/preferences.ui:20 msgid "Interface" msgstr "界面" #: data/ui/preferences.ui:23 src/revelation.py:1782 msgid "Goto Commands" msgstr "转到命令" #: data/ui/searchbar.ui:8 msgid "Text to search for" msgstr "要搜索的文本" #: data/ui/searchbar.ui:13 msgid "Find the previous match" msgstr "查找前一个匹配" #: data/ui/searchbar.ui:24 msgid "Find the next match" msgstr "查找下一个匹配" #: data/ui/toolbar.ui:10 msgid "Open a file" msgstr "打开文件" #: data/ui/toolbar.ui:18 msgid "Save data to a file" msgstr "保存数据到一个文件" #: data/ui/toolbar.ui:28 src/revelation.py:1179 msgid "Add Entry" msgstr "添加条目" #: data/ui/toolbar.ui:30 msgid "Create a new entry" msgstr "创建新条目" #: data/ui/toolbar.ui:37 src/revelation.py:1240 src/revelation.py:1245 msgid "Add folder" msgstr "添加文件夹" #: data/ui/toolbar.ui:39 msgid "Create a new folder" msgstr "创建新文件夹" #: data/ui/toolbar.ui:50 msgid "Go to the selected entries" msgstr "转到所选择的条目" #: data/ui/toolbar.ui:59 msgid "Edit the selected entry" msgstr "编辑所选择的条目" #: data/ui/toolbar.ui:67 msgid "Remove the selected entries" 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/datahandler/xhtml.py:413 msgid "Revelation account list" msgstr "Revelation 帐户列表" #: src/lib/datahandler/xhtml.py:451 msgid "Account list" msgstr "帐户列表" #: src/lib/datahandler/xhtml.py:478 msgid "Created:" msgstr "创建:" #: src/lib/datahandler/xhtml.py:481 msgid "Revelation version:" msgstr "Revelation 版本:" #: src/lib/dialog.py:190 src/lib/dialog.py:198 src/lib/dialog.py:206 #: src/lib/dialog.py:528 src/lib/dialog.py:633 src/lib/dialog.py:798 msgid "_OK" msgstr "" #: src/lib/dialog.py:223 msgid "File has changed" msgstr "文件已改变" #: src/lib/dialog.py:223 #, python-format msgid "The current file '%s' has changed. Do you want to reload it?" msgstr "当前文件 '%s' 已经被修改了。您确定要重新加载它么?" #: src/lib/dialog.py:226 src/lib/dialog.py:247 src/lib/dialog.py:315 #: src/lib/dialog.py:338 src/lib/dialog.py:531 src/lib/dialog.py:632 #: src/lib/dialog.py:797 src/lib/dialog.py:817 src/lib/dialog.py:992 #: src/lib/dialog.py:1012 msgid "_Cancel" msgstr "" #: src/lib/dialog.py:246 msgid "_Discard" msgstr "放弃 (_D)" #: src/lib/dialog.py:271 msgid "Save changes to current file?" msgstr "保存修改到当前的文件?" #: src/lib/dialog.py:272 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:281 msgid "Save changes before opening?" msgstr "在打开前保存修改?" #: src/lib/dialog.py:282 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:291 msgid "Save changes before quitting?" msgstr "在退出前保存修改?" #: src/lib/dialog.py:292 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:301 msgid "Save changes before closing?" msgstr "关闭前保存修改?" #: src/lib/dialog.py:302 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:311 msgid "Replace existing file?" msgstr "替换以存在的文件?" #: src/lib/dialog.py:312 #, python-format msgid "The file '%s' already exists - do you wish to replace this file?" msgstr "文件 '%s' 已经存在,您想替换这个文件么?" #: src/lib/dialog.py:334 msgid "Save to insecure file?" msgstr "保存到一个不安全的文件?" #: src/lib/dialog.py:335 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:403 msgid "Select File to Export to" msgstr "选择要导出的文件" #: src/lib/dialog.py:409 src/lib/dialog.py:445 msgid "Filetype" msgstr "文件类型" #: src/lib/dialog.py:439 msgid "Select File to Import" msgstr "选择要导入的文件" #: src/lib/dialog.py:447 msgid "Automatically detect" msgstr "自动检测" #: src/lib/dialog.py:473 msgid "Select File to Open" msgstr "选择要打开的文件" #: src/lib/dialog.py:478 src/lib/dialog.py:498 src/revelation.py:1765 msgid "Revelation files" msgstr "Revelation 文件" #: src/lib/dialog.py:483 src/lib/dialog.py:503 src/revelation.py:1770 msgid "All files" msgstr "所有的文件" #: src/lib/dialog.py:493 msgid "Select File to Save to" msgstr "选择要保存的文件" #: src/lib/dialog.py:568 msgid "Enter new password" msgstr "输入新密码" #: src/lib/dialog.py:569 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:615 src/lib/dialog.py:689 src/revelation.py:1049 msgid "Incorrect password" msgstr "不正确的密码" #: src/lib/dialog.py:615 msgid "The password you entered as the current file password is incorrect." msgstr "您所输入的当前文件的密码是不正确的。" #: src/lib/dialog.py:618 src/lib/dialog.py:778 msgid "Passwords don't match" msgstr "密码不匹配" #: src/lib/dialog.py:618 msgid "The password and password confirmation you entered does not match." msgstr "密码和确认密码不匹配" #: src/lib/dialog.py:628 src/lib/dialog.py:793 msgid "Use insecure password?" msgstr "使用不安全的密码?" #: src/lib/dialog.py:629 src/lib/dialog.py:794 #, 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:649 msgid "Enter password to unlock file" msgstr "输入密码以解锁文件" #: src/lib/dialog.py:650 msgid "" "The current file has been locked, please enter the file password to unlock " "it." msgstr "当前文件已经被锁定了,请输入文件密码以解锁这个文件。" #: src/lib/dialog.py:689 msgid "The password you entered was not correct, please try again." msgstr "您所输入的密码不正确,请再试一次。" #: src/lib/dialog.py:707 msgid "Enter file password" msgstr "输入文件密码" #: src/lib/dialog.py:708 #, python-format msgid "The file “%s” is encrypted. Please enter the file password to open it." msgstr "" #: src/lib/dialog.py:746 msgid "Enter password for file" msgstr "输入文件的密码" #: src/lib/dialog.py:747 #, 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:778 msgid "The passwords you entered does not match." msgstr "您所输入的密码不匹配。" #: src/lib/dialog.py:781 msgid "No password entered" msgstr "没有输入密码" #: src/lib/dialog.py:781 msgid "You must enter a password for the new data file." msgstr "您必须为这个新的数据文件输入一个密码。" #: src/lib/dialog.py:844 msgid "Account Data" msgstr "帐户数据" #: src/lib/dialog.py:863 msgid "Notes for the entry" msgstr "本条条目的注释" #: src/lib/dialog.py:941 src/lib/dialog.py:1057 msgid "Name not entered" msgstr "没有输入名称" #: src/lib/dialog.py:941 msgid "You must enter a name for the account" msgstr "您必须为这个帐户输入一个名称" #: src/lib/dialog.py:979 #, python-format msgid "Really remove the %i selected entries?" msgstr "真的要删除所选择的 %i 个条目?" #: src/lib/dialog.py:980 msgid "" "By removing these entries you will also remove any entries they may contain." msgstr "当删除这些条目的时候,也会删除他们所包含的所有条目。" #: src/lib/dialog.py:983 #, python-format msgid "Really remove folder '%s'?" msgstr "真的要删除文件夹 '%s'?" #: src/lib/dialog.py:984 msgid "" "By removing this folder you will also remove all accounts and folders it " "contains." msgstr "当删除这个文件夹的时候,也会删除它所包含的所有帐户和文件夹。" #: src/lib/dialog.py:987 #, python-format msgid "Really remove account '%s'?" msgstr "真的要删除帐户 '%s'?" #: src/lib/dialog.py:988 msgid "Please confirm that you wish to remove this account." msgstr "请确认您想删除这个帐户" #: src/lib/dialog.py:993 msgid "_Remove" msgstr "" #: src/lib/dialog.py:1057 msgid "You must enter a name for the folder" msgstr "您必须为这个文件夹输入一个名称" #: src/lib/dialog.py:1101 msgid "A password manager for the GNOME desktop" msgstr "GNOME 桌面环境的一个密码管理器" #: src/lib/dialog.py:1121 msgid "Unknown error" msgstr "未知错误" #: src/lib/dialog.py:1122 msgid "" "An unknown error occurred. 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:1200 src/lib/ui.py:538 msgid "The password seems good" msgstr "密码看起来很好" #: src/lib/dialog.py:1204 src/lib/ui.py:535 #, python-format msgid "The password %s" msgstr "密码 %s" #: src/lib/entry.py:172 msgid "Creditcard" msgstr "信用卡" #: src/lib/entry.py:190 msgid "Crypto Key" msgstr "密钥" #: src/lib/entry.py:207 src/lib/entry.py:463 msgid "Database" msgstr "数据库" #: src/lib/entry.py:224 msgid "Door lock" msgstr "门锁" #: src/lib/entry.py:239 src/lib/entry.py:485 msgid "Email" msgstr "电子邮件" #: src/lib/entry.py:256 msgid "FTP" msgstr "FTP" #: src/lib/entry.py:273 msgid "Generic" msgstr "一般的" #: src/lib/entry.py:289 msgid "Phone" msgstr "电话" #: src/lib/entry.py:304 msgid "Shell" msgstr "Shell" #: src/lib/entry.py:321 msgid "Remote Desktop" msgstr "远程桌面" #: src/lib/entry.py:338 msgid "Website" msgstr "网站" #: src/lib/entry.py:355 msgid "VNC" msgstr "VNC" #: src/lib/entry.py:408 msgid "Card number" msgstr "卡号" #: src/lib/entry.py:409 msgid "The number of a creditcard, usually a 16-digit number" msgstr "信用卡号,通常16位数字" #: src/lib/entry.py:419 msgid "Card type" msgstr "卡类型" #: src/lib/entry.py:420 msgid "The type of creditcard, like MasterCard or VISA" msgstr "信用卡种类,如 MasterCard (万事达卡) 或者 VISA" #: src/lib/entry.py:430 msgid "CCV number" msgstr "CCV 号" #: src/lib/entry.py:431 msgid "" "A Credit Card Verification number, normally a 3-digit code found on the back" " of a card" msgstr "信用卡校验号,一般是在卡的背面的一个3个数字的号码" #: src/lib/entry.py:441 msgid "Certificate" msgstr "证书" #: src/lib/entry.py:442 msgid "A certificate, such as an X.509 SSL Certificate" msgstr "一个证书,比如X.509 SSL 证书" #: src/lib/entry.py:452 msgid "Code" msgstr "密码" #: src/lib/entry.py:453 msgid "A code used to provide access to something" msgstr "一个用于访问某种东西的密码" #: src/lib/entry.py:464 msgid "A database name" msgstr "一个数据库的名字" #: src/lib/entry.py:474 msgid "Domain" msgstr "域" #: src/lib/entry.py:475 msgid "" "An Internet or logon domain, like organization.org or a Windows logon domain" msgstr "一个 Internet 或者登录的域, 比如 organization.org 或者 一个 Windows 登录域" #: src/lib/entry.py:486 msgid "An email address" msgstr "一个电子邮件地址" #: src/lib/entry.py:496 msgid "Expiry date" msgstr "过期日期" #: src/lib/entry.py:497 msgid "The month that the credit card validity expires" msgstr "信用卡合法性过期的那个月" #: src/lib/entry.py:507 msgid "Hostname" msgstr "主机名" #: src/lib/entry.py:508 msgid "The name of a computer, like computer.domain.com or MYCOMPUTER" msgstr "计算机名,比如 computer.domain.com 或者 MYCOMPUTER" #: src/lib/entry.py:518 msgid "Key File" msgstr "钥匙文件" #: src/lib/entry.py:519 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:529 msgid "Location" msgstr "位置" #: src/lib/entry.py:530 msgid "A physical location, like office entrance" msgstr "一个物理地址,比如办公室门牌号" #: src/lib/entry.py:540 msgid "Password" msgstr "密码" #: src/lib/entry.py:541 msgid "" "A secret word or character combination used for proving you have access" msgstr "用于提供你访问权限的一个密码或者字符的组合" #: src/lib/entry.py:551 msgid "Phone number" msgstr "电话号码" #: src/lib/entry.py:552 msgid "A telephone number" msgstr "一个电话号码" #: src/lib/entry.py:562 msgid "PIN" msgstr "PIN" #: src/lib/entry.py:563 msgid "" "A Personal Identification Number, a numeric code used for credit cards, " "phones etc" msgstr "个人标识号码,信用卡或者电话所使用的数字密码" #: src/lib/entry.py:573 msgid "Port number" msgstr "端口号" #: src/lib/entry.py:574 msgid "A network port number, used to access network services directly" msgstr "一个网络端口号,用于直接访问网络服务" #: src/lib/entry.py:584 msgid "URL" msgstr "URL" #: src/lib/entry.py:585 msgid "A Uniform Resource Locator, such as a web-site address" msgstr "一个URL,比如一个网站地址" #: src/lib/entry.py:595 msgid "Username" msgstr "用户名" #: src/lib/entry.py:596 msgid "A name or other identification used to identify yourself" msgstr "用于标识你自己的一个名字或者其他的标识符" #: src/lib/ui.py:37 msgid "_Continue" msgstr "继续 (_C)" #: src/lib/ui.py:42 msgid "_Generate" msgstr "生成 (_G)" #: src/lib/ui.py:46 msgid "_Add Entry" msgstr "添加条目(_A)" #. "revelation-new-entry" #: src/lib/ui.py:47 msgid "_Add Folder" msgstr "添加文件夹 (_A)" #. "revelation-new-folder" #. "revelation-next" #: src/lib/ui.py:49 msgid "_Change" msgstr "修改 (_C)" #. "revelation-password-change" #. nosec #. nosec "revelation-password-strong" #. nosec "revelation-password-weak" #. "revelation-previous" #: src/lib/ui.py:54 msgid "_Reload" msgstr "重新加载 (_R)" #: src/lib/ui.py:56 msgid "_Replace" msgstr "替换 (_R)" #. "revelation-replace" #. "revelation-unknown" #: src/lib/ui.py:58 msgid "_Unlock" msgstr "解锁 (_U)" #. "revelation-unlock" #: src/lib/ui.py:59 msgid "_Update" msgstr "更新 (_U)" #: src/lib/ui.py:328 src/lib/ui.py:544 msgid "Copy password" msgstr "复制密码" #: src/lib/ui.py:432 msgid "Select File" msgstr "选择文件" #: src/lib/ui.py:439 msgid "Browse..." msgstr "浏览..." #: src/lib/ui.py:569 msgid "Generate" msgstr "生成" #. notes #: src/lib/ui.py:1171 msgid "Notes: " msgstr "注释:" #: src/lib/ui.py:1177 #, python-format msgid "Updated %s ago" msgstr "以前更新过 %s" #: src/lib/ui.py:1212 msgid "Any type" msgstr "任何类型" #: src/lib/util.py:56 msgid "is too short" msgstr "太短了" #: src/lib/util.py:64 msgid "isn't varied enough" msgstr "没有足够的变化" #: src/lib/util.py:89 msgid "is too weak" msgstr "太弱了" #: src/lib/util.py:97 msgid "is a palindrome" msgstr "是一个回文" #: src/lib/util.py:310 #, python-format msgid "%i seconds" msgstr "%i 秒" #: src/lib/util.py:318 msgid "years" msgstr "年" #: src/lib/util.py:318 msgid "year" msgstr "年" #: src/lib/util.py:326 msgid "months" msgstr "月" #: src/lib/util.py:326 msgid "month" msgstr "月" #: src/lib/util.py:330 msgid "weeks" msgstr "周" #: src/lib/util.py:330 msgid "week" msgstr "周" #: src/lib/util.py:334 msgid "days" msgstr "日" #: src/lib/util.py:334 msgid "day" msgstr "日" #: src/lib/util.py:338 msgid "hours" msgstr "小时" #: src/lib/util.py:338 msgid "hour" msgstr "小时" #: src/lib/util.py:342 msgid "minute" msgstr "分" #: src/lib/util.py:346 msgid "seconds" msgstr "秒" #: src/lib/util.py:346 msgid "second" msgstr "秒" #: src/revelation.py:89 msgid "Missing data files" msgstr "丢失数据文件" #: src/revelation.py:89 msgid "" "Some of Revelations system files could not be found, please reinstall " "Revelation." msgstr "一些 Revelation 系统文件无法被找到, 请重新安装 Revelation。" #: src/revelation.py:93 msgid "Missing configuration data" msgstr "丢失配置数据" #: src/revelation.py:93 msgid "" "Revelation could not find its configuration data, please reinstall " "Revelation." msgstr "Revelation 无法找到它的配置数据,请重新安装 Revelation。" #: src/revelation.py:97 msgid "Invalid data files" msgstr "非法数据文件" #: src/revelation.py:97 msgid "" "Some of Revelations system files contain invalid data, please reinstall " "Revelation." msgstr "一些 Revelation 系统文件包含非法数据, 请重新安装 Revelation。" #: src/revelation.py:580 msgid "New file" msgstr "新文件" #: src/revelation.py:595 #, python-format msgid "_Undo %s" msgstr "撤销 %s (_U)" #: src/revelation.py:605 #, python-format msgid "_Redo %s" msgstr "重复 %s (_R)" #: src/revelation.py:689 src/revelation.py:1552 msgid "Open cancelled" msgstr "取消了打开文件" #: src/revelation.py:997 #, python-format msgid "Match found for “%s”" msgstr "" #: src/revelation.py:1001 #, python-format msgid "No match found for “%s”" msgstr "" #: src/revelation.py:1041 msgid "Old file format" msgstr "老旧文件格式" #: src/revelation.py:1041 #, 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:1049 #, python-format msgid "The password you entered for the file '%s' was not correct." msgstr "您所输入的 '%s' 文件的密码是不正确的。" #: src/revelation.py:1052 src/revelation.py:1056 src/revelation.py:1060 #: src/revelation.py:1064 src/revelation.py:1068 msgid "Open failed" msgstr "打开失败" #: src/revelation.py:1053 msgid "Invalid file format" msgstr "非法文件格式" #: src/revelation.py:1053 #, python-format msgid "The file '%s' contains invalid data." msgstr "文件 '%s' 包含非法数据。" #: src/revelation.py:1057 msgid "Unknown data" msgstr "未知数据" #: src/revelation.py:1057 #, 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:1061 msgid "Unknown data version" msgstr "未知数据版本" #: src/revelation.py:1061 #, python-format msgid "" "The file '%s' has a future version number, please upgrade Revelation to open" " it." msgstr "文件 '%s' 拥有更新的版本号, 请您升级 Revelation 来打开它。" #: src/revelation.py:1065 msgid "Unable to detect filetype" msgstr "无法检测文件类型" #: src/revelation.py:1065 #, 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:1069 msgid "Unable to open file" msgstr "无法打开文件" #: src/revelation.py:1069 #, 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:1113 msgid "Entry has no password to copy" msgstr "条目没有密码可复制" #: src/revelation.py:1117 msgid "Password copied to clipboard" msgstr "复制了密码到剪贴板" #: src/revelation.py:1123 msgid "Entries copied" msgstr "复制了条目" #: src/revelation.py:1144 msgid "Cut entries" msgstr "剪切条目" #: src/revelation.py:1151 msgid "Entries cut" msgstr "剪切了条目" #: src/revelation.py:1165 msgid "Paste entries" msgstr "粘贴了条目" #: src/revelation.py:1172 msgid "Entries pasted" msgstr "粘贴了条目" #: src/revelation.py:1186 msgid "Add entry" msgstr "添加条目" #: src/revelation.py:1192 msgid "Entry added" msgstr "添加了条目" #: src/revelation.py:1195 msgid "Add entry cancelled" msgstr "取消了添加条目" #: src/revelation.py:1207 msgid "Edit Folder" msgstr "编辑文件夹" #: src/revelation.py:1210 msgid "Edit Entry" msgstr "编辑条目" #: src/revelation.py:1218 msgid "Update entry" msgstr "更新条目" #: src/revelation.py:1223 msgid "Entry updated" msgstr "更新了条目" #: src/revelation.py:1226 msgid "Edit entry cancelled" msgstr "取消了编辑条目" #: src/revelation.py:1251 msgid "Folder added" msgstr "添加了文件夹" #: src/revelation.py:1254 msgid "Add folder cancelled" msgstr "取消了添加文件夹" #: src/revelation.py:1267 #, python-format msgid "No goto command found for %s entries" msgstr "没有找到 %s 条目的 goto 命令" #: src/revelation.py:1290 msgid "Entry opened" msgstr "打开了条目" #: src/revelation.py:1293 msgid "Invalid goto command format" msgstr "非法 goto 命令格式" #: src/revelation.py:1293 #, python-format msgid "" "The goto command for '%s' entries is invalid, please correct it in the " "preferences." msgstr "'%s' 条目的 goto 命令是非法的,请在偏好设置中修正。" #: src/revelation.py:1296 msgid "Missing entry data" msgstr "丢失条目数据" #: src/revelation.py:1296 #, python-format msgid "The entry '%s' does not have all the data required to open it." msgstr "条目 '%s' 没有包含所有用于打开它所必须的数据。" #: src/revelation.py:1316 msgid "Move entry" msgstr "移动条目" #: src/revelation.py:1324 msgid "Entries moved" msgstr "移动了条目" #: src/revelation.py:1350 msgid "Remove entry" msgstr "删除条目" #: src/revelation.py:1356 msgid "Entries removed" msgstr "删除了条目" #: src/revelation.py:1359 msgid "Entry removal cancelled" msgstr "取消了删除条目" #: src/revelation.py:1372 msgid "Password changed" msgstr "密码已修改" #: src/revelation.py:1375 msgid "Password change cancelled" msgstr "取消了修改密码" #: src/revelation.py:1389 #, python-format msgid "Closed file %s" msgstr "" #: src/revelation.py:1395 msgid "Close file cancelled" msgstr "" #: src/revelation.py:1413 #, python-format msgid "Data exported to %s" msgstr "数据导出到 %s" #: src/revelation.py:1416 msgid "Export cancelled" msgstr "取消了导出" #: src/revelation.py:1419 msgid "Unable to write to file" msgstr "无法写入文件" #: src/revelation.py:1419 src/revelation.py:1575 #, 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:1420 msgid "Export failed" msgstr "导出失败" #: src/revelation.py:1435 msgid "Import data" msgstr "导入数据" #: src/revelation.py:1439 #, python-format msgid "Data imported from %s" msgstr "数据从 %s 导入" #: src/revelation.py:1444 msgid "Import cancelled" msgstr "取消了导入" #: src/revelation.py:1474 msgid "Locked" msgstr "锁定了" #: src/revelation.py:1475 msgid "File locked" msgstr "文件被锁定" #: src/revelation.py:1487 msgid "Quit disabled due to unsaved changes" msgstr "由于有未保存的修改所以退出被禁止了" #: src/revelation.py:1500 msgid "File unlocked" msgstr "文件解锁了" #: src/revelation.py:1521 msgid "New file created" msgstr "创建了新文件" #: src/revelation.py:1524 msgid "New file cancelled" msgstr "取消了新文件" #: src/revelation.py:1549 #, python-format msgid "Opened file %s" msgstr "打开了文件 %s" #: src/revelation.py:1566 #, python-format msgid "Data saved to file %s" msgstr "数据保存到文件 %s" #: src/revelation.py:1571 msgid "Save cancelled" msgstr "取消了保存" #: src/revelation.py:1575 msgid "Unable to save file" msgstr "无法保存文件" #: src/revelation.py:1576 msgid "Save failed" msgstr "保存失败" #: src/revelation.py:1616 msgid "Quit cancelled" msgstr "取消了退出" #: src/revelation.py:1628 #, python-format msgid "%s redone" msgstr "重复了 %s" #: src/revelation.py:1640 #, python-format msgid "%s undone" msgstr "撤销了 %s" #: src/revelation.py:1648 msgid "Preferences" msgstr "首选项" #: src/revelation.py:1795 #, python-format msgid "" "Goto command for %s accounts. The following expansion variables can be used:" msgstr "转到 %s 帐户的命令。 可以使用下列扩展变量:" #: src/revelation.py:1801 msgid "%%: a \"%\" sign" msgstr "%%: 一个%符号" #: src/revelation.py:1802 msgid "%?x: optional expansion variable" msgstr "%?x: 可选扩展变量" #: src/revelation.py:1803 msgid "%(...%): optional substring expansion" msgstr "%(...%): 可选子字符串扩展" revelation-revelation-0.5.6/requirements.txt000066400000000000000000000000551510620476600213330ustar00rootroot00000000000000PyGObject defusedxml pycryptodomex pwquality revelation-revelation-0.5.6/src/000077500000000000000000000000001510620476600166365ustar00rootroot00000000000000revelation-revelation-0.5.6/src/lib/000077500000000000000000000000001510620476600174045ustar00rootroot00000000000000revelation-revelation-0.5.6/src/lib/__init__.py000066400000000000000000000024011510620476600215120ustar00rootroot00000000000000# # 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.6/src/lib/config.py.in000066400000000000000000000044321510620476600216330ustar00rootroot00000000000000# # 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 = "Gauzak ez dira horrela. Gauzak horrelaxe daude" URL = "https://revelation.olasagasti.info/" AUTHORS = [ "Erik Grinaker ","Mikel Olasagasti Uranga " ] ARTISTS = [ "Erik Grinaker " ] COPYRIGHT = _('Copyright') + " \251 2003-2007 Erik Grinaker\n2010-2025 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.6/src/lib/data.py000066400000000000000000000421451510620476600206750ustar00rootroot00000000000000# # 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: 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): 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 is not None: if self.match(iter, string, entrytype): 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 not self.folders: 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 not self.namedesconly: items.extend([field.value for field in e.fields if field.value != ""]) # run the search for item in items: if self.casesensitive and string in item: return True elif not self.casesensitive 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: 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 not e.has_field(fieldtype): 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 is not 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 not self.can_redo(): 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 not self.can_undo(): 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 not self.can_redo(): 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 not self.can_undo(): 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.6/src/lib/datahandler/000077500000000000000000000000001510620476600216535ustar00rootroot00000000000000revelation-revelation-0.5.6/src/lib/datahandler/__init__.py000066400000000000000000000045171510620476600237730ustar00rootroot00000000000000# # 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 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, 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): 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.6/src/lib/datahandler/base.py000066400000000000000000000036431510620476600231450ustar00rootroot00000000000000# # 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.6/src/lib/datahandler/csvfile.py000066400000000000000000000137451510620476600236720ustar00rootroot00000000000000# 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.6/src/lib/datahandler/fpm.py000066400000000000000000000207411510620476600230130ustar00rootroot00000000000000# # 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.6/src/lib/datahandler/gpass.py000066400000000000000000000264111510620476600233460ustar00rootroot00000000000000# # 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 is not 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 is not 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.6/src/lib/datahandler/keepassxc.py000066400000000000000000000070141510620476600242150ustar00rootroot00000000000000# # 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.6/src/lib/datahandler/netrc.py000066400000000000000000000101061510620476600233360ustar00rootroot00000000000000# # 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.6/src/lib/datahandler/pwsafe.py000066400000000000000000000454141510620476600235220ustar00rootroot00000000000000# # 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 is not 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 is not 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 is not None: plainblock = bytes([plainblock[i] ^ cbc[i] for i in range(len(plainblock))]) cipherblock = encrypt_block(cipher, plainblock) ciphertext += cipherblock if cbc is not 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.6/src/lib/datahandler/rvl.py000066400000000000000000000351651510620476600230420ustar00rootroot00000000000000# # 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 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 zlib 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] != " # # 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 separate 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.6/src/lib/datahandler/text.py000066400000000000000000000045051510620476600232150ustar00rootroot00000000000000# # 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.6/src/lib/datahandler/xhtml.py000066400000000000000000000343111510620476600233630ustar00rootroot00000000000000# # 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.6/src/lib/dialog.py000066400000000000000000001246611510620476600212270ustar00rootroot00000000000000# # 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 = {} # 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) content_area = self.get_content_area() ui.apply_css_padding(content_area, 12) content_area.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 load_ui_section(self, resource_path, object_name, pack=True): "Load a UI section from a resource file and optionally pack it into content area" builder = Gtk.Builder() builder.add_from_resource(resource_path) section = builder.get_object(object_name) if pack: content_area = self.get_content_area() content_area.pack_start(section, True, True, 0) return builder, section def run(self): "Runs the dialog" self.show_all() response = Gtk.Dialog.run(self) # Handle edge case where ResponseType.NONE might be returned # (e.g., on Wayland or in certain GTK3 scenarios) # Retry once, but avoid infinite loop if response == Gtk.ResponseType.NONE: response = Gtk.Dialog.run(self) return response def load_ui_builder(resource_path): "Helper function to load a UI builder from a resource file (for non-Dialog classes)" builder = Gtk.Builder() builder.add_from_resource(resource_path) return builder def replace_widget(builder, object_id, new_widget): "Replace a widget from UI file with a custom widget" ui_widget = builder.get_object(object_id) widget_parent = ui_widget.get_parent() widget_parent.remove(ui_widget) widget_parent.pack_start(new_widget, True, True, 0) widget_parent.show_all() return new_widget def set_section_title(builder, object_id, text): "Set a section title with bold markup" title = builder.get_object(object_id) title.set_markup(f"{util.escape_markup(text)}") def get_entry(builder, object_id): "Get an entry widget from builder and set activates_default" entry = builder.get_object(object_id) entry.set_activates_default(True) return entry class Utility(Dialog): "A utility dialog" def __init__(self, parent, title): Dialog.__init__(self, parent, title) self.get_content_area().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.get_content_area().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, "") # Load UI from file builder, message_hbox = self.load_ui_section('/info/olasagasti/revelation/ui/message.ui', 'message_hbox') content_area = self.get_content_area() content_area.set_spacing(24) # Set up image (optional) - image is defined in XML self.message_image = builder.get_object('message_image') if stockimage is not None: self.message_image.set_from_icon_name(stockimage, Gtk.IconSize.DIALOG) else: # Hide the image if no icon provided self.message_image.set_visible(False) # Get contents VBox from UI file self.contents = builder.get_object('contents') # Get message label and set markup label = builder.get_object('message_label') label.set_markup("%s\n\n%s" % (util.escape_markup(title), text)) 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(_("_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(_("_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(_("_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(_("_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(_("_Discard"), Gtk.ResponseType.ACCEPT) self.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) self.add_button(_("_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(_("_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(_("_Cancel"), Gtk.ResponseType.CANCEL) self.add_button(_("_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 = _("_OK")): Message.__init__(self, parent, title, text, "dialog-password") self.add_button(_("_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 # Load password section from UI file builder, password_section = self.load_ui_section('/info/olasagasti/revelation/ui/password-change.ui', 'password_section', pack=False) # Replace the InputSection with UI file content # Remove the old InputSection self.contents.remove(self.sect_passwords) # Add the UI file section self.contents.pack_start(password_section, True, True, 0) # Get the current password entry from UI file (optional) current_entry_row = builder.get_object('current_password_entry').get_parent() if password is not None: self.entry_current = get_entry(builder, 'current_password_entry') else: # Hide the current password row if password is None current_entry_row.set_visible(False) self.entry_current = None # Get the new password entry from UI file and replace with PasswordEntry self.entry_new = replace_widget(builder, 'new_password_entry', ui.PasswordEntry()) # Get the confirm password entry from UI file self.entry_confirm = get_entry(builder, 'confirm_password_entry') self.entry_confirm.autocheck = False # Build entries list self.entries = [] if self.entry_current is not None: self.entries.append(self.entry_current) self.entries.extend([self.entry_new, self.entry_confirm]) 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(_("_Cancel"), Gtk.ResponseType.CANCEL) WarnInsecure.add_button(_("_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(_("_Quit")) self.set_default_response(Gtk.ResponseType.OK) self.password = password # Load password section from UI file builder, password_section = self.load_ui_section('/info/olasagasti/revelation/ui/password-lock.ui', 'password_section', pack=False) # Replace the InputSection with UI file content # Remove the old InputSection self.contents.remove(self.sect_passwords) # Add the UI file section self.contents.pack_start(password_section, True, True, 0) # Get the password entry from UI file self.entry_password = get_entry(builder, 'password_entry') self.entries = [self.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"): 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, _("_Open") ) self.set_default_response(Gtk.ResponseType.OK) # Load password section from UI file builder, password_section = self.load_ui_section('/info/olasagasti/revelation/ui/password-open.ui', 'password_section', pack=False) # Replace the InputSection with UI file content # Remove the old InputSection self.contents.remove(self.sect_passwords) # Add the UI file section self.contents.pack_start(password_section, True, True, 0) # Get the password entry from UI file self.entry_password = get_entry(builder, 'password_entry') self.entries = [self.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, _("_Save") ) # Load password section from UI file builder, password_section = self.load_ui_section('/info/olasagasti/revelation/ui/password-save.ui', 'password_section', pack=False) # Replace the InputSection with UI file content # Remove the old InputSection self.contents.remove(self.sect_passwords) # Add the UI file section self.contents.pack_start(password_section, True, True, 0) # Get the new password entry from UI file and replace with PasswordEntry self.entry_new = replace_widget(builder, 'new_password_entry', ui.PasswordEntry()) # Get the confirm password entry from UI file self.entry_confirm = get_entry(builder, 'confirm_password_entry') self.entry_confirm.autocheck = False self.entries = [self.entry_new, self.entry_confirm] 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(_("_Cancel"), Gtk.ResponseType.CANCEL) WarnInsecure.add_button(_("_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(_("_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 = {} # Load UI from file builder, unused_section = self.load_ui_section('/info/olasagasti/revelation/ui/entry-edit.ui', 'meta_section', pack=False) # Get sections from UI file meta_section = builder.get_object('meta_section') notes_section = builder.get_object('notes_section') # Set section titles with markup set_section_title(builder, 'meta_title', title) set_section_title(builder, 'notes_title', _('Notes')) # Add sections to dialog content_area = self.get_content_area() content_area.pack_start(meta_section, True, True, 0) self.sect_fields = self.add_section(_('Account Data')) content_area.pack_start(notes_section, True, True, 0) # Get entry widgets from UI file self.entry_name = get_entry(builder, 'name_entry') self.entry_desc = get_entry(builder, 'description_entry') # Add EntryDropDown to EventBox container (defined in XML) dropdown_container = builder.get_object('type_dropdown_container') self.dropdown = ui.EntryDropDown() self.dropdown.connect("changed", lambda w: self.__setup_fieldsect(self.dropdown.get_active_type()().fields)) dropdown_container.add(self.dropdown) dropdown_container.show_all() # Replace notes placeholder with EditableTextView notes_placeholder = builder.get_object('notes_placeholder') notes_placeholder_parent = notes_placeholder.get_parent() notes_placeholder_parent.remove(notes_placeholder) self.entry_notes = ui.EditableTextView() self.entry_notes.set_tooltip_text(_('Notes for the entry')) notes_placeholder_parent.pack_start(self.entry_notes, True, True, 0) notes_placeholder_parent.show_all() # Add labels to sizegroup for alignment name_label = builder.get_object('name_label') description_label = builder.get_object('description_label') type_label = builder.get_object('type_label') self.sizegroup.add_widget(name_label) self.sizegroup.add_widget(description_label) self.sizegroup.add_widget(type_label) # 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"): 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(_("_Cancel"), Gtk.ResponseType.CANCEL) self.add_button(_("_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(_("_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) # Load UI from file builder, section = self.load_ui_section('/info/olasagasti/revelation/ui/folder-edit.ui', 'folder_section') # Set section title with markup set_section_title(builder, 'section_title', title) # Get entry widgets from UI file self.entry_name = get_entry(builder, 'name_entry') self.entry_desc = get_entry(builder, 'description_entry') # Add labels to sizegroup for alignment name_label = builder.get_object('name_label') description_label = builder.get_object('description_label') self.sizegroup.add_widget(name_label) self.sizegroup.add_widget(description_label) # 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) # Load static properties from UI file builder = load_ui_builder('/info/olasagasti/revelation/ui/about.ui') ui_dialog = builder.get_object('about_dialog') # Copy static properties from UI file self.set_property("program-name", ui_dialog.get_property("program-name")) self.set_property("website-label", ui_dialog.get_property("website-label")) self.set_property("license-type", ui_dialog.get_property("license-type")) # Set properties from config (source of truth) 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 occurred. 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(_("_Quit"), Gtk.ResponseType.CANCEL) self.add_button(ui.STOCK_CONTINUE, Gtk.ResponseType.OK) # Load traceback section from UI file builder, unused_section = self.load_ui_section('/info/olasagasti/revelation/ui/exception.ui', 'exception_section', pack=False) # Get the scrolled window from UI file ui_scrolled = builder.get_object('traceback_scrolled') # Replace the textview with custom ui.TextView ui_textview = builder.get_object('traceback_textview') textview = ui.TextView(None, traceback) # Replace the textview in the scrolled window ui_scrolled.remove(ui_textview) ui_scrolled.add(textview) self.contents.pack_start(ui_scrolled, 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(_("_Close"), Gtk.ResponseType.CLOSE) self.set_default_response(Gtk.ResponseType.CLOSE) self.cfg = cfg self.set_modal(False) self.set_size_request(300, -1) # Load UI from file builder, section = self.load_ui_section('/info/olasagasti/revelation/ui/password-checker.ui', 'password_checker_section') # Set section title with markup set_section_title(builder, 'section_title', _('Password Checker')) # Get password entry from UI file and replace with PasswordEntry self.entry = replace_widget(builder, 'password_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')) # Get result display widgets from UI file (Box with Image and Label) self.result_container = builder.get_object('result_container') self.result_image = builder.get_object('result_image') self.result_label = builder.get_object('result_label') # Set initial icon self.result_image.set_from_icon_name(ui.STOCK_UNKNOWN, ui.ICON_SIZE_HEADLINE) # Add label to sizegroup for alignment password_label = builder.get_object('password_label') self.sizegroup.add_widget(password_label) 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_label.set_markup(util.escape_markup(result)) self.result_image.set_from_icon_name(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(_("_Close"), Gtk.ResponseType.CLOSE) self.add_button(ui.STOCK_GENERATE, Gtk.ResponseType.OK) self.config = cfg self.set_modal(False) # Load UI from file builder, section = self.load_ui_section('/info/olasagasti/revelation/ui/password-generator.ui', 'password_generator_section') # Set section title with markup set_section_title(builder, 'section_title', _('Password Generator')) # Get widgets from UI file self.entry = replace_widget(builder, 'password_entry', ui.PasswordEntry(None, cfg, clipboard)) self.entry.autocheck = False self.entry.set_editable(False) self.entry.set_tooltip_text(_('The generated password')) # Get spin button from UI file (range and adjustment already set in XML) self.spin_pwlen = builder.get_object('length_spin') self.config.bind("passwordgen-length", self.spin_pwlen, "value", Gio.SettingsBindFlags.DEFAULT) self.check_punctuation_chars = builder.get_object('punctuation_check') 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.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(dialog, *args): "Creates a unique dialog or returns existing one" if unique_exists(dialog): return get_unique(dialog) 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 it exists, None otherwise" if unique_exists(dialog): return UNIQUE_DIALOGS[dialog] return None def present_unique(dialog): "Presents a unique dialog if it exists, returns True if presented" if unique_exists(dialog): get_unique(dialog).present() return True return False def remove_unique(dialog): "Removes a unique dialog" if unique_exists(dialog): UNIQUE_DIALOGS[dialog] = None def run_unique_dialog(dialog, *args): "Runs a unique dialog, returns None if already presented" if present_unique(dialog): return None d = create_unique_dialog(dialog, *args) return d.run() def unique_exists(dialog): "Checks if a unique dialog exists" return dialog in UNIQUE_DIALOGS and UNIQUE_DIALOGS[dialog] is not None revelation-revelation-0.5.6/src/lib/entry.py000066400000000000000000000342701510620476600211250ustar00rootroot00000000000000# # 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 entries 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.6/src/lib/io.py000066400000000000000000000136121510620476600203700ustar00rootroot00000000000000# # 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 is not None: self.__monitorhandle = file_monitor(file, self.__cb_monitor) def __monitor_stop(self): "Stops monitoring the current file" if self.__monitorhandle is not 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 and password is None and pwgetter is not 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.6/src/lib/ui.py000066400000000000000000001160021510620476600203730ustar00rootroot00000000000000# # 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 = "application-x-executable" # "revelation-account-creditcard" STOCK_ENTRY_CRYPTOKEY = "dialog-password" # "revelation-account-cryptokey" STOCK_ENTRY_DATABASE = "drive-harddisk" # "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 # EXCEPTIONS # class DataError(Exception): "Exception for invalid data" pass # FUNCTIONS # def apply_css_padding(widget, padding): "Apply CSS padding to a widget (replaces set_border_width)" # Add CSS class with padding value to avoid conflicts between different padding values css_class = f"revelation-padding-{padding}" style_context = widget.get_style_context() style_context.add_class(css_class) # Create CSS provider with the class selector css_provider = Gtk.CssProvider() css = f".{css_class} {{ padding: {padding}px; }}" css_provider.load_from_data(css.encode()) style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) 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 InputSection(Gtk.Box): "A section of input fields" def __init__(self, title = None, description = None, sizegroup = None): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL) self.set_spacing(6) 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 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) row.set_spacing(12) self.pack_start(row, False, False, 0) if self.title is not None and indent: 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 ImageLabel(Gtk.Box): "A label with an image" def __init__(self, text = None, stock = None, size = ICON_SIZE_LABEL): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) self.set_spacing(6) self.image = Gtk.Image() self.pack_start(self.image, False, True, 0) self.label = Label(text) self.pack_start(self.label, True, True, 0) if stock is not None: self.image.set_from_icon_name(stock, size) 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" # Map justification to horizontal alignment _JUSTIFY_TO_ALIGN = { Gtk.Justification.LEFT: Gtk.Align.START, Gtk.Justification.CENTER: Gtk.Align.CENTER, Gtk.Justification.RIGHT: Gtk.Align.END, } 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) self.set_halign(self._JUSTIFY_TO_ALIGN.get(justify, Gtk.Align.START)) 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(Gtk.EventBox): "A label for displaying passwords" def __init__(self, password = "", cfg = None, clipboard = None, justify = Gtk.Justification.LEFT): # nosec Gtk.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(): return False elif data.button == 3: menu = Menu() menuitem = ImageMenuItem("edit-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: 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) if text is not None: Gtk.Entry.set_text(self, text) class FileEntry(Gtk.Box): "A file entry" def __init__(self, title = None, file = None, type = Gtk.FileChooserAction.OPEN): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) self.set_spacing(6) 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 = Gtk.Button(label=_('Browse...')) self.button.connect("clicked", 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: # Get parent window for the file selector toplevel = self.get_toplevel() parent = toplevel if isinstance(toplevel, Gtk.Window) else None fsel = dialog.FileSelector(parent, self.title, self.type) file = self.get_filename() # Only set filename if it's not empty and is a valid path if file and file != "" and file != "/": try: fsel.set_filename(file) except (ValueError, TypeError): # If setting filename fails, just continue without it pass filename = fsel.run() if filename: self.set_filename(filename) 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) self.set_activates_default(True) 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 is not 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 not self.autocheck: 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 is not None: menuitem = ImageMenuItem("edit-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(Gtk.Box): "A password entry with a generator button" def __init__(self, password = None, cfg = None, clipboard = None): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) self.set_spacing(6) self.config = cfg self.pwentry = PasswordEntry(password, cfg, clipboard) self.pack_start(self.pwentry, True, True, 0) self.button = Gtk.Button(label=_('Generate')) self.button.connect("clicked", 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) # BUTTONS # 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: 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 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.get_num_items()): if self.get_item(i)[2] == entrytype: self.set_active(i) break 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) # MENUS AND MENU ITEMS # class ImageMenuItem(Gtk.MenuItem): "A menuitem with an icon" def __init__(self, stock, text = None): Gtk.MenuItem.__init__(self) # Create a horizontal box for image and label box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) box.set_spacing(6) # Create and add image self.image = Gtk.Image() self.image.set_from_icon_name(stock, Gtk.IconSize.MENU) box.pack_start(self.image, False, False, 0) # Create and add label self.label = Gtk.Label() if text is not None: self.label.set_text(text) else: # Try to get text from stock icon name self.label.set_text("") box.pack_start(self.label, True, True, 0) # Add box to menuitem self.add(box) 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 is not None: iter = self.model.get_iter(path[0]) self.toggle_expanded(iter) if iter is not None: self.emit("doubleclick", iter) # display popup on right-click elif data.button == 3: if path is not None and not self.selection.iter_is_selected(self.model.get_iter(path[0])): 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 is not None and self.selection.iter_is_selected(self.model.get_iter(path[0])) 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)): 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 not self.selection.iter_is_selected(iter): 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 not self.row_expanded(self.model.get_path(child)): 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 "") # 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): 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: 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(Gtk.Box): "A component for displaying an entry" def __init__(self, cfg = None, clipboard = None): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL) self.set_spacing(12) apply_css_padding(self, 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 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) metabox.set_spacing(6) 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) Gtk.Box.pack_start(self, widget, False, False, 0) class Searchbar(Gtk.Toolbar): "A toolbar for easy searching" def __init__(self): Gtk.Toolbar.__init__(self) # Load UI from file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/searchbar.ui') # Get the box from UI file box = builder.get_object('searchbar_box') Gtk.StyleContext.add_class(box.get_style_context(), "linked") # Get widgets from UI file self.entry = builder.get_object('search_entry') self.button_prev = builder.get_object('button_prev') self.button_next = builder.get_object('button_next') # Replace dropdown placeholder with EntryDropDown dropdown_placeholder = builder.get_object('dropdown_placeholder') self.dropdown = EntryDropDown() self.dropdown.insert_item(0, _('Any type'), "help-about") # Replace the placeholder in the UI dropdown_parent = dropdown_placeholder.get_parent() dropdown_parent.remove(dropdown_placeholder) dropdown_parent.pack_start(self.dropdown, False, False, 0) dropdown_parent.show_all() # Add the search box to the toolbar toolitem = Gtk.ToolItem() toolitem.add(box) self.insert(toolitem, -1) 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.6/src/lib/util.py000066400000000000000000000216751510620476600207460ustar00rootroot00000000000000# # 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.6/src/meson.build000066400000000000000000000012511510620476600207770ustar00rootroot00000000000000install_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'] ) 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.6/src/revelation.py000066400000000000000000002220621510620476600213640ustar00rootroot00000000000000#!/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"): 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"): 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 is not None] if len(pixbufs) > 0: Gtk.Window.set_default_icon_list(pixbufs) # set up toolbar and menus self.set_menubar(self.menubar) # Load toolbar from UI file toolbarbuilder = Gtk.Builder() toolbarbuilder.add_from_resource('/info/olasagasti/revelation/ui/toolbar.ui') self.toolbar = toolbarbuilder.get_object('toolbar') # Connect toolbar button signals open_item = toolbarbuilder.get_object('open_item') open_item.connect('clicked', lambda k: self.window.get_action_group("file").lookup_action("file-open").activate()) save_item = toolbarbuilder.get_object('save_item') save_item.connect('clicked', lambda k: self.window.get_action_group("file").lookup_action("file-save").activate()) addentry_item = toolbarbuilder.get_object('addentry_item') addentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-optional").lookup_action("entry-add").activate()) addfolder_item = toolbarbuilder.get_object('addfolder_item') addfolder_item.connect('clicked', lambda k: self.window.get_action_group("entry-optional").lookup_action("entry-folder").activate()) gotoentry_item = toolbarbuilder.get_object('gotoentry_item') gotoentry_item.connect('clicked', lambda k: self.window.get_action_group("dynamic").lookup_action("entry-goto").activate()) editentry_item = toolbarbuilder.get_object('editentry_item') editentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-single").lookup_action("entry-edit").activate()) removeentry_item = toolbarbuilder.get_object('removeentry_item') removeentry_item.connect('clicked', lambda k: self.window.get_action_group("entry-multiple").lookup_action("entry-remove").activate()) self.toolbar.connect("popup-context-menu", lambda w, x, y, b: True) self.add_toolbar(self.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 = Gtk.ScrolledWindow() self.scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scrolledwindow.add(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) ui.apply_css_padding(self.hpaned, 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(): 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(): 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"): self.file_lock() def __cb_screensaver_lock(self, connection, unique_name, object_path, interface, signal, state): if state[0] and self.config.get_boolean("file-autolock"): self.file_lock() def __cb_quit(self, widget, data = None): "Callback for quit" if not self.quit(): return True else: return False def __cb_close(self, widget, data = None): "Callback for Close" if not self.file_close(): 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) 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 is not 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 not self.config.get_boolean("file-autosave"): 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 seamless upgrades. if not datafile.get_handler().detect(io.file_read(file)): # 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 seamless version upgrade on save if old_handler is not 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(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") 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") and len(chain) > 0 and e.has_field(entry.UsernameField) 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 and dialog.FileChangesClose(self.window).run(): if not self.file_save(self.datafile.get_file(), self.datafile.get_password()): 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: 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: 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 and dialog.FileChangesNew(self.window).run(): if not self.file_save(self.datafile.get_file(), self.datafile.get_password()): 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 and dialog.FileChangesOpen(self.window).run(): if not self.file_save(self.datafile.get_file(), self.datafile.get_password()): 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_dialog(Preferences, self.window, self.config) def pwcheck(self): "Displays the password checking dialog" dialog.run_unique_dialog(dialog.PasswordChecker, self.window, self.config, self.clipboard) def pwgen(self): "Displays the password generator dialog" dialog.run_unique_dialog(dialog.PasswordGenerator, self.window, self.config, self.clipboard) def quit(self): "Quits the application" try: if self.entrystore.changed and dialog.FileChangesQuit(self.window).run(): if not self.file_save(self.datafile.get_file(), self.datafile.get_password()): 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(_("_Close"), Gtk.ResponseType.CLOSE) self.set_default_response(Gtk.ResponseType.CLOSE) self.config = cfg self.set_modal(False) # Load notebook and pages from UI file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/preferences.ui') self.notebook = builder.get_object('preferences_notebook') self.get_content_area().pack_start(self.notebook, True, True, 0) # Get pages and tab labels from UI file self.page_general = builder.get_object('page_general') tab_general = builder.get_object('tab_general') ui.apply_css_padding(self.page_general, 12) self.page_general.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) self.notebook.append_page(self.page_general, tab_general) self.__init_section_files(self.page_general) self.__init_section_password(self.page_general) self.page_interface = builder.get_object('page_interface') tab_interface = builder.get_object('tab_interface') ui.apply_css_padding(self.page_interface, 12) self.page_interface.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) self.notebook.append_page(self.page_interface, tab_interface) self.__init_section_doubleclick(self.page_interface) self.__init_section_toolbar(self.page_interface) self.page_gotocmd = builder.get_object('page_gotocmd') tab_gotocmd = builder.get_object('tab_gotocmd') ui.apply_css_padding(self.page_gotocmd, 12) self.page_gotocmd.sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) self.notebook.append_page(self.page_gotocmd, tab_gotocmd) 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" # Load UI from file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/preferences-doubleclick.ui') # Get the section from UI file doubleclick_section = builder.get_object('doubleclick_section') # Set section title with markup doubleclick_title = builder.get_object('doubleclick_title') doubleclick_title.set_markup(f"{util.escape_markup(_('Doubleclick Action'))}") # Add section to page page.pack_start(doubleclick_section, False, False, 0) self.section_doubleclick = doubleclick_section # Get radio buttons from UI file self.radio_doubleclick_goto = builder.get_object('radio_doubleclick_goto') self.radio_doubleclick_edit = builder.get_object('radio_doubleclick_edit') self.radio_doubleclick_copy = builder.get_object('radio_doubleclick_copy') # Set up radio button group self.radio_doubleclick_edit.join_group(self.radio_doubleclick_goto) self.radio_doubleclick_copy.join_group(self.radio_doubleclick_goto) # Connect signals self.radio_doubleclick_goto.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "goto")) self.radio_doubleclick_edit.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "edit")) self.radio_doubleclick_copy.connect("toggled", lambda w: w.get_active() and self.config.set_string("behavior-doubleclick", "copy")) # Set active radio button based on config {"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" # Load UI from file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/preferences-files.ui') # Get the section from UI file files_section = builder.get_object('files_section') # Set section title with markup files_title = builder.get_object('files_title') files_title.set_markup(f"{util.escape_markup(_('Files'))}") # Add section to page page.pack_start(files_section, False, False, 0) self.section_files = files_section # Get widgets from UI file self.check_autoload = builder.get_object('check_autoload') self.button_autoload_file = builder.get_object('button_autoload_file') self.check_autosave = builder.get_object('check_autosave') self.check_autolock = builder.get_object('check_autolock') # Set up GSettings bindings self.config.bind("file-autoload", self.check_autoload, "active", Gio.SettingsBindFlags.DEFAULT) self.config.bind("file-autosave", self.check_autosave, "active", Gio.SettingsBindFlags.DEFAULT) self.config.bind("file-autolock", self.check_autolock, "active", Gio.SettingsBindFlags.DEFAULT) # Connect signals self.check_autoload.connect("toggled", lambda w: self.button_autoload_file.set_sensitive(w.get_active())) self.check_autolock.connect("toggled", lambda w: self.spin_autolock_timeout.set_sensitive(w.get_active())) # Set up file chooser button 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()) # Add file filters 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) # Get spin button from UI file (range and adjustment already set in XML) self.spin_autolock_timeout = builder.get_object('spin_autolock_timeout') 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) def __init_section_gotocmd(self, page): "Sets up the goto command section" section = ui.InputSection(_('Goto Commands'), None, page.sizegroup) page.pack_start(section, False, False, 0) self.section_gotocmd = section 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" # Load UI from file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/preferences-passwords.ui') # Get the section from UI file passwords_section = builder.get_object('passwords_section') # Set section title with markup passwords_title = builder.get_object('passwords_title') passwords_title.set_markup(f"{util.escape_markup(_('Passwords'))}") # Add section to page page.pack_start(passwords_section, False, False, 0) self.section_password = passwords_section # Get widgets from UI file self.check_show_passwords = builder.get_object('check_show_passwords') self.check_chain_username = builder.get_object('check_chain_username') self.check_punctuation_chars = builder.get_object('check_punctuation_chars') # Set up GSettings bindings self.config.bind("view-passwords", self.check_show_passwords, "active", Gio.SettingsBindFlags.DEFAULT) self.config.bind("clipboard-chain-username", self.check_chain_username, "active", Gio.SettingsBindFlags.DEFAULT) self.config.bind("passwordgen-punctuation", self.check_punctuation_chars, "active", Gio.SettingsBindFlags.DEFAULT) # Get spin button from UI file (range and adjustment already set in XML) self.spin_pwlen = builder.get_object('spin_pwlen') self.config.bind("passwordgen-length", self.spin_pwlen, "value", Gio.SettingsBindFlags.DEFAULT) # Add label to sizegroup for alignment password_length_label = builder.get_object('password_length_label') page.sizegroup.add_widget(password_length_label) def __init_section_toolbar(self, page): "Sets up the toolbar section" # Load UI from file builder = Gtk.Builder() builder.add_from_resource('/info/olasagasti/revelation/ui/preferences-toolbar.ui') # Get the section from UI file toolbar_section = builder.get_object('toolbar_section') # Set section title with markup toolbar_title = builder.get_object('toolbar_title') toolbar_title.set_markup(f"{util.escape_markup(_('Toolbar Style'))}") # Add section to page page.pack_start(toolbar_section, False, False, 0) self.section_toolbar = toolbar_section # Get radio buttons from UI file self.radio_toolbar_desktop = builder.get_object('radio_toolbar_desktop') self.radio_toolbar_both = builder.get_object('radio_toolbar_both') self.radio_toolbar_bothhoriz = builder.get_object('radio_toolbar_bothhoriz') self.radio_toolbar_icons = builder.get_object('radio_toolbar_icons') self.radio_toolbar_text = builder.get_object('radio_toolbar_text') # Set up radio button group self.radio_toolbar_both.join_group(self.radio_toolbar_desktop) self.radio_toolbar_bothhoriz.join_group(self.radio_toolbar_desktop) self.radio_toolbar_icons.join_group(self.radio_toolbar_desktop) self.radio_toolbar_text.join_group(self.radio_toolbar_desktop) # Connect signals self.radio_toolbar_desktop.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "desktop")) self.radio_toolbar_both.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "both")) self.radio_toolbar_bothhoriz.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "both-horiz")) self.radio_toolbar_icons.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "icons")) self.radio_toolbar_text.connect("toggled", lambda w: w.get_active() and self.config.set_string("view-toolbar-style", "text")) # Set active radio button based on config {"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()